Кто-нибудь может привести пример чрезмерного использования шаблонов дизайна? - PullRequest
5 голосов
/ 21 января 2009

Я слышал и читал о случаях, когда люди сталкивались со случаями чрезмерного использования шаблонов проектирования. Хорошо, неправильно используемые шаблоны дизайна - понятное явление. Что это на самом деле означает чрезмерно используемые шаблоны проектирования?

Есть ли у вас примеры и почему вы думаете, что слишком много шаблонов?

Ответы [ 13 ]

23 голосов
/ 21 января 2009

singleton , вероятно, является наиболее перегруженным шаблоном проектирования . Я часто вижу, что он используется во многих случаях, когда он выходит за рамки и гораздо более уместен для непосредственного создания объектов.

После этого я считаю, что фабричный шаблон слишком часто используется как ярлык для создания экземпляров объектов, часто без реальной необходимости.

10 голосов
/ 21 января 2009

Объектная ориентация, которая больше не является образцом дизайна, а образ жизни. Я видел много процедурного кода, спрятанного в объектах, и множество объектов ради объектов, потому что дух времени говорит «предположительно, что вы объектно-ориентированы», когда несколько строк C и структуры будут работать так же хорошо.

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

7 голосов
/ 21 января 2009

Я голосую за ActiveRecord.

Многие популярные структуры доступа к данным используют ActiveRecord в качестве шаблона доступа к данным only , своего рода универсальное решение, хотя книга Мартина Фаулера «Шаблоны архитектуры корпоративных приложений» описывает несколько других шаблоны доступа к данным и подробные сведения о сильных сторонах каждого шаблона и о том, как решить, когда использовать каждый шаблон.

5 голосов
/ 21 января 2009

(иногда) так называемый JavaBeans-Pattern: геттеры и сеттеры для каждого поля. Весьма сомнительно и чрезвычайно широко распространено.

5 голосов
/ 21 января 2009

Полагаю, Синглтон легко злоупотребляется (хотя он, безусловно, имеет законное применение).

Зависимость от паттерна синглтона называется Синглтонит . :) Симптомы включают, по крайней мере, чрезмерно высокое сцепление, и тестирование становится более трудным.

Редактировать : В качестве предписанного лекарства от синглтонита можно попробовать Inline Singleton , описанный в [1015 * Рефакторинг к паттернам Джошуа Кериевского.

Редактировать 2 : Хорошее обсуждение синглетонов смотрите в старом вопросе: Что плохого в синглетонах

4 голосов
/ 21 января 2009

ПРЕАМБУЛА: Как правило, синглтон считается наиболее злоупотребляемым шаблоном, если не более чем тот факт, что многие будут использовать его для написания поточного программирования фактически, если не в действительности, тогда как другие это как замена глобальных переменных.

ТЕЛО: Существует книга под названием "Язык шаблонов", которая предшествует выдающемуся GoF на несколько лет. Он призывает к схожему языку между различными аспектами проекта - он, очевидно, оказал большое влияние на «Шаблоны проектирования», и те, кто знает оба текста, считают его превосходящим.

Мой личный опыт показывает, что GoF полезен только в определенных обстоятельствах и далеко не охватывает все ООП. Я действительно нахожу довольно забавным, что некоторые шаблоны устарели в других языках, а другие просто излишне описывают тот же сценарий (действительно ли так много различий между тем, что адаптирует и переводит?)

Шаблоны, в общем, хорошая вещь. Хорошо, что Singletons обычно используют статический метод getInstance. Хорошо, что многие структуры MVC используют аналогичные соглашения об именах. С другой стороны, паттерны - это еще не все, и это нужно помнить.

Рекомендуемое чтение: http://perl.plover.com/yak/design/

3 голосов
/ 21 января 2009

Шаблон синглтона, который подходит только в очень немногих случаях и усложняет тестирование. Он не только чрезмерно используется, но и часто плохо реализуется в Java и C # - люди часто спешат с двойной проверкой блокировки, когда она не только неуместна, но и относительно трудно понять.

РЕДАКТИРОВАТЬ: Я действительно должен был понять, что все будут публиковать одно и то же.

Следующий пример, фабричный шаблон и, в частности, его использование в API Java DOM. Blech.

2 голосов
/ 21 января 2009

Я думаю, что худшая проблема, чем чрезмерно используемые шаблоны проектирования, заключается в неправильном применении шаблонов разработчиками-энтузиастами, которые недавно изучили новый инструмент шаблонов и решили, что им нужно его опробовать. Недавно я читал некоторые из блога Миско Хевери (http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/) записей о внедрении зависимостей. Одно из его основных утверждений заключается в том, что шаблон синглтона, реализованный как глобальный экземпляр, серьезно ограничивает тестируемость и его следует избегать.

Несколько дней назад я прочитал интересное мнение о шаблонах из блога Кристиана Грубера. Он полагает, что они полезны в качестве инструмента для обсуждения архитектур, но не должны использоваться при разработке концепции, чтобы архитектура программного обеспечения не превратилась в то, что он называет «рисовать цифрами». См. Параграф «Шаблоны проектирования»: http://www.geekinasuit.com/2008/12/testability-re-discovering-what-we.html.

Таким образом, возможно, проблема с шаблонами проектирования заключается в неправильном применении и туннельном видении, вызванном восприятием того, что все хорошо разработанное программное обеспечение должно соответствовать одному из шаблонов, описанных в «Банде четырех».

2 голосов
/ 21 января 2009

Я собираюсь взвесить сильно перегруженный синглтон. Довольно часто разработчики изучают только этот шаблон и используют его, когда статический класс будет столь же эффективным.

2 голосов
/ 21 января 2009

Я бы сказал, что Singleton хорошо используется. Часто есть гораздо лучшие решения, чем использование глобальной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...