Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

На мой взгляд, вопрос:"А ты знаешь использование шаблон проектирования?", сам по себе немного некорректен, потому что ответ универсально ПОЛОЖИТЕЛЬНЫЙ.

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

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

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

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

Чтобы вернуться к вашему первоначальному вопросу:
"Использую ли я шаблоны проектирования?", Да!
"Склоняюсь ли я активно к шаблонам проектирования?", Нет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ДА.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top