Яка модель дизайну найчастіше використовується? [зачинено]


24

Яка модель дизайну, на вашу думку, є найпопулярнішою?


Обоє, якщо можливо…
Тамара Війсман

"переключення замість поліморфізму"?
mlvljr

@Bigown: Потім слід "прийняти" відповідь, яка вам найбільше сподобалась. Якщо вам не подобається жодна з відповідей, будь ласка, запропонуйте щедроту.
Макнейл

2
проголосували за закриття як неконструктивне - це в основному опитування. Якщо у когось не буде проведено емпіричне дослідження, всі відповіді будуть здогадами чи фаворитами (або не обраними), і голоси відображають особисті настрої. Кінцевим результатом стане список моделей дизайну без глибини. Отже, не конструктивна.
Стівен А. Лоу

@Steven: Я майже впевнений, що Джей має рацію з «Великим балом бруду». :-)
Тамара Війсман

Відповіді:


39

Я впевнений, що найпоширеніший - «Великий бал бруду». На жаль для всіх нас.
http://en.wikipedia.org/wiki/Big_ball_of_mud


Погодьтеся, коли ви починаєте новий проект, все добре структуровано та задокументовано, але, коли наблизився термін, все закінчується як великий куля з грязюкою
Артуро Моліна

3
@Arturo - Це одна з можливих причин. Інші: 1) Невеликий проект, розпочатий недосвідченим програмістом, який несподівано успішно розвивається, а потім виходить за рамки його первісного призначення. 2) Схильність недосвідчених програмістів, призначених на обслуговування, які потім не мають керівництва або розуміння оригінальної архітектури, тому вони просто виламують речі, і це стає гіршим у віці системи. 3) Команда використовує неправильну технологію, або нову технологію, з якою вони незнайомі, і погано використовує її в новому проекті, і він кратерить до встановленого терміну :)
Jay,

1
LOL - якби я міг додати більше балів до вас, я би. Відмінне (і сумне) спостереження.
luis.espinal

25

MVC та його варіації, безумовно, є однією з найкращих моделей дизайну.


2
Я збирався сказати, що питання ОП досить дурне (я все-таки вважаю, що так). Однак Ваша відповідь, як правило, правильна IMO. Якщо є одна закономірність (і її варіації), яка в значній мірі використовується послідовно, саме ця. +1 за вашу добру відповідь.
luis.espinal

21

Якщо ви говорите про шаблони дизайну Gang-of-Four, я б сказав Singleton . Це справді сумний стан справ - майже так, ніби програмісти чують про магію дизайнерських моделей, а потім просто зупиняються після першого.

Якщо ви говорите про структури архітектурного стилю (іншими словами, шаблони дизайну, які охоплюють декілька класів або шарів), я б сказав MVC . Ще кілька популярних - це схема сховища та локатор обслуговування .


2
Ще сумніше, коли ти вважаєш, що багато людей вважають Сінглтона антипаттерном!
RichardOD

1
@ RichardOD, сумно, що люди вважають його таким, коли його немає, або сумно, що люди використовують його, коли це анти-шаблон?
Метт Оленік

Що я маю на увазі, це сумно, що це так популярно - це, здається, є улюбленим інтерв'ю. Востаннє, коли мене брали інтерв'ю, мене запитали, як я кодую Singleton, і моя відповідь полягала в тому, що я б не використовував контейнер IoC, як Unity, щоб обробити це для мене.
RichardOD

@RichardOD - це не одиночність, що вважається антидіаграмою. Саме використання зловживань є анти-закономірністю. Дуже мало випадків вимагають / потребують одиночних, а в середовищах з контейнерами, які контролюють деталізацію ресурсів, вони навіть не потрібні. Наприклад, коли ви бачите синглтон в сучасній базі коду Java, це, як правило, червоний прапор для використання
антидіагранного

@Jaco - я б по-іншому ставлюся до тебе. Я думаю, що композиція, стратегія та шаблон (і їх багаторазові перевтілення) стали набагато набагато більш поширеними, ніж одиночні, тим більше, що ми зосередилися на структурному складі над успадкуванням протягом останнього десятиліття.
luis.espinal


7

Декоратор

Додайте функціональність об’єкту під час виконання через композицію. Мій особистий фаворит.

Редагувати: Також завод , мабуть, один із найпоширеніших.


5

Фасад

Подумайте про будь-який інтерфейс REST, наприклад, Twitter або API SO. У ньому ховається купа решти речей, які, принаймні у випадку з твіттерами, можуть бути жахливо складними.

Мене цікавить, у яких таблицях db @ @ apklusk зберігаються? І що у нього швидкий кеш? І що @shemnon має таку низьку читацьку аудиторію, твіти завжди залишаються в пам'яті? Ось така магія Фасаду.


5

Стратегія

Якщо ви коли-небудь використовували ін'єкцію залежності, ви використовували схему стратегії.


Погоджено, стратегія на додаток до шаблону та композиту (та їх декілька варіацій та комбінацій.)
luis.espinal

5

Чому ще ніхто не згадав ітератора ? Особливо з усіма картами, які складають складні структури даних ... його я використовую найбільше. Або ми говоримо про закономірності, які ми повторно реалізуємо?


3

Я здивований, що ніхто не згадав про заводський зразок, на моєму досвіді це одна з найбільш використовуваних (а також найбільш зловживаних) моделей. Якби не перше, напевно, сингл має бути першим, я б подумав, що це буде близька секунда.


3

Поряд зі своєю попередньою відповіддю, я збираюся додати нову, в яку я зіткнувся сьогодні зі своїм звіром у спадок:

Копіювати Вставити

Під час налагодження я зіткнувся з фрагментом коду, що викликає 2 аналогічні функції:

if(x)
   Func1
else
   Func2

Func1 і Func2 мали однакові параметри. Я витягнув їх і відрізнявся, і вони на 100% однакові, за винятком викликів Func1, Func3 та Func2, викликів Func4. Я витягнув їх і розправив їх. 100% те саме, за винятком 1 рядка. Тож попередній програміст вирішив скопіювати та вставити дві 50-рядкові вкладені функції, замість того, щоб додавати параметр прапорця, до 2 приватних функцій, які використовуються в точно 1 місці. Це змушує мене плакати.


2

Якщо говорити про шаблони дизайну Gang-of-Four, я не можу придумати програму, яка не використовує шаблон Observer. Крім того, як зауважив Джако, Синглтон також дуже використовується, на жаль, він став молотом (будь-який програміст використовує його, навіть якщо він не потрібен повністю).


1
Смішно, але мені ніколи не було необхідності використовувати Singleton. Якщо мені потрібно десь утримувати глобальний стан, я кладу його у файл конфігурації та використовую звичайний клас для доступу до нього.
Роберт Харві

Звичайно, у тих випадках це не потрібно ... а як бути, коли вам справді потрібен один об'єкт, щоб виконати якусь роботу, синхронно та безпечно для потоків. Сінглтон не просто для того, щоб утримувати стан деяких статичних змінних, це справжній об’єкт, з яким потрібно реально виконувати роботу тощо.
Крістіан

Єдиний раз, коли я коли-небудь бачив потребу в цьому, це підключення до бази даних. Однак, майже кожен клас "Сервіс" (читайте: подібний до заводського) у цьому проекті на роботі - сингл, який зберігається у $_SESSIONзмінній PHP .
Тарка


1

Я здивований, що ніхто ще не сказав "Будівельник". Або "Адаптер". Вони, мабуть, не такі екзотичні, як деякі інші згадані, але я постійно їх використовую. Заводська та абстрактна фабрика також дуже поширені (але вони вже прийняті).




0

На рівні розробки програмного забезпечення я можу стверджувати, що найпоширенішими є використання композиту, стратегії та шаблону (і в меншій мірі - завод). Впродовж останнього десятиліття або близько того ми бачили перевагу композиції над спадщиною, коли будували наші системи за допомогою проекту OO. В результаті поєднання згаданих моделей грають набагато важливішу роль, ніж усі інші ІМО.

В архітектурному плані я б сперечався щодо MVC на підприємстві та зразки, засновані на державних машинах на вбудованій стороні речей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.