Вы используете шаблоны дизайна? - PullRequest
28 голосов
/ 14 августа 2008

Какое проникновение шаблонов проектирования в реальный мир? Используете ли вы их в своей повседневной работе - обсуждаете, как и где применять их со своими коллегами - или они остаются в большей степени академической концепцией?

Они действительно дают реальную ценность вашей работе? Или они просто о чем-то говорят, чтобы звучать умно?

Примечание: для целей этого вопроса игнорируйте «простые» шаблоны проектирования, такие как Singleton . Я говорю о разработке вашего кода, чтобы вы могли воспользоваться Model View Controller и т. Д.

Ответы [ 15 ]

54 голосов
/ 14 августа 2008

Любая хорошо написанная большая программа будет использовать шаблоны проектирования, даже если они не названы или не распознаются как таковые. Вот что такое шаблоны проектирования, проекты, которые повторяются и естественно . Если вы взаимодействуете с уродливым API, вы, вероятно, обнаружите, что внедряете Facade для его очистки. Если у вас есть обмен сообщениями между компонентами, которые вам нужно отделить, вы можете использовать Observer. Если у вас есть несколько взаимозаменяемых алгоритмов, вы можете использовать Strategy.

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

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

10 голосов
/ 15 августа 2008

На мой взгляд, вопрос: «Используете ли вы шаблон проектирования ?», Сам по себе немного ошибочен, потому что ответ универсально ДА.

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

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

Не поймите меня неправильно, если вы новичок, книги по шаблонам покажут вам, как лучше всего решить проблему, используя "шаблоны", а не другой некорректный дизайн. Вы, вероятно, узнаете из упражнения. Тем не менее, вы должны понимать, что это не означает, что каждой ситуации нужен соответствующий шаблон для ее решения. В каждой ситуации есть свои особенности, которые требуют от вас обдумывания альтернатив и принятия трудного решения без идеального ответа. Это дизайн.

Однако анти-паттерны относятся к совершенно другому классу. Вы на самом деле хотите до активно избегать анти-паттернов. Вот почему название анти-паттерна так противоречиво.

Чтобы вернуться к исходному вопросу:
«Использую ли я шаблоны проектирования?», Да!
«Я активно склоняюсь к шаблонам дизайна?», №

4 голосов
/ 14 февраля 2010

Да. Шаблоны дизайна могут быть замечательными при правильном использовании. Как вы упомянули, сейчас я использую Model-View-Controller (MVC) для всех моих веб-проектов. Это очень распространенный шаблон в веб-пространстве, который делает код на стороне сервера более чистым и хорошо организованным.

Помимо этого, вот некоторые другие шаблоны, которые могут быть полезны:

  • MVVM (Model-View-ViewModel): шаблон, аналогичный MVC; используется для приложений WPF и Silverlight.

  • Композиция: отлично подходит для случаев, когда вам нужно использовать иерархию объектов.

  • Singleton: более элегантно, чем использование глобалов для хранения предметов, которые действительно нуждаются в единственном экземпляре. Как вы упомянули, простой шаблон, но у него есть свои применения.

Стоит отметить, что шаблон проектирования также может указывать на отсутствие языковых функций и / или недостатки языка. Например, итераторы теперь встроены как часть новых языков.

В целом шаблоны проектирования довольно полезны, но вы не должны использовать их повсюду; именно там, где они подходят для ваших нужд.

3 голосов
/ 14 августа 2008

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

3 голосов
/ 14 августа 2008

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

2 голосов
/ 14 августа 2008

Да, Factory, Chain of Responsibility, Command, Proxy, Visitor и Observer, среди прочего, используются в кодовой базе, с которой я работаю ежедневно. Что касается MVC, этот сайт, кажется, использует его довольно хорошо, и разработчики не могли сказать достаточно хороших слов в последнем подкасте .

2 голосов
/ 14 августа 2008

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

Мы также используем шаблоны, которые не документированы, но которые возникают при проектировании.

Имейте в виду, мы не используем их часто.

2 голосов
/ 14 августа 2008

Существует множество шаблонов проектирования помимо простых, которые используются в «реальном мире». Хороший пример Stackoverflow использует шаблон контроллера представления модели. Я много раз использовал Class Factories в проектах для своего работодателя, и я видел много уже написанных проектов, использующих их.

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

1 голос
/ 19 октября 2012

Да.

Мы даже используем их в моей текущей работе: кодирование мэйнфреймов с использованием COBOL и PL / I.

До сих пор я видел Adapter, Visitor, Facade, Module, Observer и что-то очень похожее на Composite и Iterator. Из-за природы языков в основном используются структурные схемы. Кроме того, я не всегда уверен, что люди, которые их используют, делают это осознанно: D

1 голос
/ 30 марта 2010

Да, шаблоны дизайна или абстрактные шаблоны - это часть моей жизни, куда я смотрю, я начинаю их видеть. Поэтому я окружен ими. Но, как вы знаете, мало знаний - опасная вещь. Поэтому я настоятельно рекомендую вам прочитать книгу GoF.

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

Как вы знаете, анти-паттерн - это тоже опасная вещь, и это происходит, когда у вас мало опыта в паттернах проектирования. А рефакторинг анти-паттернов намного сложнее. В качестве рекомендуемой книги об этой проблеме, пожалуйста, прочитайте «AntiPatterns: рефакторинг программного обеспечения, архитектур и проектов в кризисе».

...