Какой шаблон дизайна наиболее часто используется? [закрыто]

24

Какой шаблон дизайна вы считаете наиболее популярным?

Тамара Вийсман
источник
И то, и другое, если возможно ...
Тамара Вийсман,
"переключаться вместо полиморфизма"?
mlvljr
@Bigown: Вы должны «принять» ответ, который вам понравился больше всего. Если вам не нравится какой-либо из ответов, пожалуйста, предложите награду.
Макнейл
2
проголосовали за закрытие как неконструктивные - это в основном опрос. Если у кого-то нет эмпирического исследования, на которое будут ссылаться, все ответы будут предположительными или фаворитами (или не фаворитами), а голоса будут отражать личные чувства. Конечным результатом будет список шаблонов дизайна без глубины. Следовательно, не конструктивно.
Стивен А. Лоу
@ Стивен: Я почти уверен, что Джей прав с The Big Ball of Mud. :-)
Тамара Вийсман

Ответы:

39

Я уверен, что наиболее распространенным является «Большой шарик грязи». К сожалению для всех нас.
http://en.wikipedia.org/wiki/Big_ball_of_mud

сойка
источник
Согласитесь, когда вы начинаете новый проект, все хорошо структурировано и задокументировано, но по мере приближения крайнего срока все заканчивается как большой шарик грязи
Артуро Молина
3
@ Артуро - Это одна из возможных причин. Другие: 1) Небольшой проект, начатый неопытным программистом, который неожиданно успешен, а затем выходит за рамки своей первоначальной цели. 2) Тенденция неопытных программистов назначаться на обслуживание, которые тогда не имеют руководства или понимания оригинальной архитектуры, поэтому они просто взламывают вещи, и это ухудшается с возрастом системы. 3) Команда использует неправильную технологию или новую технологию, с которой они не знакомы, и плохо использует ее в новом проекте, и она начинает работать раньше срока :)
Jay
1
LOL - если бы я мог добавить больше очков для вас, я бы. Отличное (и грустное) наблюдение.
luis.espinal
25

MVC и его вариации, безусловно, один из лучших шаблонов дизайна.

ysolik
источник
2
Я собирался сказать, что вопрос ОП довольно глупый (я все еще верю, что это так). Тем не менее, ваш ответ в значительной степени правильный IMO. Если есть один шаблон (и его вариации), который в значительной степени используется последовательно, то именно этот. +1 за хороший ответ.
luis.espinal
21

Если вы говорите о шаблонах проектирования Gang-of-Four, я бы сказал « Синглтон» . Это действительно печальное положение вещей - почти как программисты слышат о магии шаблонов проектирования, а затем просто останавливаются после первого.

Если вы говорите о шаблонах архитектурного стиля (другими словами, шаблонах проектирования, которые охватывают несколько классов или слоев), я бы сказал MVC . Несколько других популярных - это шаблон репозитория и сервис-локатор .

Яко Преториус
источник
2
Еще печальнее, если учесть, что многие считают Синглтон антипаттерном!
RichardOD
1
@RichardOD, грустно, что люди считают это, когда это не так, или грустно, что люди используют это, когда это анти-паттерн?
Мэтт Оленик
Я имею в виду, что это так печально, что это так популярно - это, кажется, любимое интервью. В прошлый раз, когда у меня брали интервью, меня спросили, как я буду кодировать Singleton, и я ответил, что не буду использовать контейнер IoC, такой как Unity, чтобы справиться с этим для меня.
RichardOD
@RichardOD - это не синглтон, что считается анти-паттерном. Именно злоупотребление им является анти-паттерном. Очень немногие случаи фактически требуют / нуждаются в singleton, а в средах с контейнерами, которые контролируют гранулярность ресурсов, они даже не нужны. Когда вы видите одиночки в современном базе кода Java, например, это , как правило , красный флаг для антишаблона использования (не на самом одноплодном шаблоне.)
luis.espinal
@Jaco - я бы взял у тебя другое мнение. Я думаю, что составная часть, стратегия и шаблон (и их многократные реинкарнации) стали гораздо более распространенными, чем синглтон, особенно с тех пор, как мы сосредоточились на структурной композиции, а не на наследовании, в течение последнего десятилетия или около того.
luis.espinal
16

наблюдатель

Если вы когда-либо использовали событие. Вы использовали Observer.

Стивен Эверс
источник
Это должно быть победителем!
Фредрик Валлениус
7

декоратор

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

Изменить: Также Фабрика , вероятно, является одним из самых распространенных.

оборота Дж.Д. Айзекс
источник
5

Фасад

Подумайте о любом интерфейсе REST, таком как Twitter или SO API. Он скрывает кучу серверных вещей, которые, по крайней мере в случае с твиттерами, могут быть ужасно сложными.

Меня волнует, в каких твитах db таблицы @ apklusk хранятся? А что у него быстрый кеш? И что у @shemnon такая низкая читаемость, что твиты всегда не запоминаются? Это магия фасада.

shemnon
источник
5

Шаблон стратегии

Если вы когда-либо использовали внедрение зависимостей, вы использовали шаблон стратегии.

richeym
источник
Согласовано, стратегия в дополнение к шаблону и составной (и их несколько вариантов и комбинаций.)
luis.espinal
5

Почему еще никто не упомянул итератор ? Особенно со всеми картами, которые составляют сложные структуры данных ... именно эту я использую больше всего. Или мы говорим о шаблонах, которые мы повторно реализуем?

На пляж
источник
3

Я удивлен, что никто не упомянул шаблон Фабрики, по моему опыту, который является одним из наиболее часто используемых (и также наиболее злоупотребляемых) шаблонов. Если бы не первый, возможно, синглтон должен быть первым, я бы подумал, что это будет вторая секунда.

AlexC
источник
3

Наряду с моим предыдущим ответом, я собираюсь добавить новый, с которым я столкнулся сегодня, от моего зверя унаследованного проекта:

Копировать вставить

Во время отладки я наткнулся на фрагмент кода, вызывающий 2 функции с одинаковыми именами:

if(x)
   Func1
else
   Func2

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

Jay
источник
2

Говоря о шаблонах проектирования Gang-of-Four, я не могу представить программу, которая не использует шаблон Observer. Кроме того, как упоминал Жако, синглтон также широко используется, к сожалению, он стал молотом (любой программист использует его, даже если он не нужен полностью).

Cristian
источник
1
Забавно, но у меня никогда не было необходимости использовать Singleton. Если мне нужно какое-то место для хранения глобального состояния, я помещаю его в файл конфигурации и использую обычный класс для доступа к нему.
Роберт Харви
Конечно, в этих случаях это не нужно ... как насчет того, когда вам действительно нужен один объект, чтобы выполнять некоторую работу, синхронно и поточно-ориентированно. Синглтон предназначен не только для хранения состояния некоторых статических переменных, это реальный объект с реальной работой и т. Д.
Кристиан
Единственный раз, когда я видел в этом необходимость, это соединения с базой данных. Тем не менее, почти каждый класс "Service" (читай: похожий на фабрику) в этом проекте на работе является одноэлементным и хранится в $_SESSIONпеременной PHP .
Тарка
2

переводчик

Редко применяется, часто используется. Селекторы XPATH, XSLT, Regex, jQuery и т. Д.

Джесси Милликен
источник
1

Я удивлен, что никто еще не сказал "Строитель". Или «Адаптер». Они, вероятно, не такие экзотические, как некоторые из упомянутых, но я использую их все время. Фабрика и Абстрактная Фабрика также очень распространены (но они уже заняты).

Тим Класон
источник
0

На уровне разработки программного обеспечения я бы сказал, что Composite, Strategy и Template (и, в меньшей степени, Factory) используются наиболее широко. В течение последнего десятилетия мы видели предпочтение композиции перед наследованием при построении наших систем с использованием ОО-дизайна. В результате комбинация только что упомянутых моделей играет гораздо более важную роль, чем все другие ИМО.

Архитектурно, я бы поспорил о MVC на предприятии и о шаблонах, основанных на конечных автоматах, на внедренной стороне вещей.

luis.espinal
источник