Используете ли вы шаблоны проектирования?

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

Помните, мы не используем их много.

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

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

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

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

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

Ответ 12

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

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

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

Ответ 13

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

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

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

Ответ 14

Да.

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

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

Ответ 15

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

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

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