Вы используете шаблоны дизайна?

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

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

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

14.08.2008 19:39:32
15 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

54
14.08.2008 20:00:38

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

3
14.08.2008 19:41:40

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

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

2
14.08.2008 19:42:32

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

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

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

2
14.08.2008 19:44:40

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

2
14.08.2008 20:02:37

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

3
14.08.2008 19:46:04
Но как вы можете ознакомиться с ним, если вы не пытаетесь его использовать ?! В первый раз это будет отстой, но со временем вы начнете использовать их соответствующим образом. В других работах, как вы можете добиться успеха без сбоев?
Nikita Fedyashev 29.03.2009 18:10:35
Конечно, вы должны экспериментировать, но не с рабочим кодом. Об этом я и говорил.
Patrik Svensson 30.03.2009 08:30:40
Но разве производственный код не является истинным тестом того, что то, что вы сделали, действительно работает - и работает хорошо?
Steven Evers 15.05.2009 22:31:37

Да, я использую много хорошо известных шаблонов проектирования, но я также заканчиваю созданием некоторого программного обеспечения, которое позже выясняется, использует «именованный» шаблон проектирования. Самые элегантные, многократно используемые конструкции можно назвать «узором». Это очень похоже на танцевальные движения. Мы все знаем вальс и двухэтапный, но не у всех есть название «удар и шут», хотя большинство из нас это делают.

1
14.08.2008 19:47:18

MVC очень хорошо известен, так что да, мы довольно часто используем шаблоны проектирования. Теперь, если вы спрашиваете о шаблонах Gang of Four, я использую несколько шаблонов, потому что другие сопровождающие будут знать дизайн и то, над чем мы работаем в коде. Однако некоторые из них остаются довольно неясными для того, что мы делаем, поэтому, если я использую один, я не получу всех преимуществ от использования шаблона.

Являются ли они важными, да, потому что это дает вам способ говорить о разработке программного обеспечения быстро эффективным и общепринятым способом. Можете ли вы сделать лучшие индивидуальные решения, ну да (Сорта)?

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

1
14.08.2008 19:47:20

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

Кроме того, я недавно использовал шаблон фабрики из базового класса для генерации и возврата нужного класса DataContext, который мне нужен на лету, с использованием LINQ .

Мосты используются при попытке склеить две разные технологии (например, Какао и Руби на Mac)

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

Нужно просто быть осторожным, чтобы не стать астронавтом архитектуры !

1
14.08.2008 19:50:15

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

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

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

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

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

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

10
14.08.2008 20:16:55

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

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

Шаблоны дизайна определенно играют большую роль во всех моих идеях «на будущее».

0
14.08.2008 21:50:32

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

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

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

1
27.08.2008 17:50:05

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

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

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

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

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

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

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

4
18.07.2010 13:37:18

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

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

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

1
30.03.2010 11:56:41

Да.

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

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

1
19.10.2012 08:45:20