Что если я не буду использовать Шаблоны разработки программного обеспечения? [закрыто]

17

С какими проблемами я могу столкнуться, если не буду использовать Шаблоны разработки программного обеспечения? Можете ли вы рассказать мне о проблемах подхода к дизайну с использованием стандартных объектно-ориентированных методов?

я студент
источник
24
Довольно много шаблонов проектирования программного обеспечения довольно очевидны. Вы должны знать их всех очень хорошо, чтобы быть уверенными, что вы ими не пользуетесь - возможно, достаточно хорошо, чтобы вы могли их использовать!
Джеймс Маклеод
18
Как побочный эффект @JamesMcLeod, многие «Шаблоны проектирования» очень очевидны, и вещи все равно будут делать. Почему мы даем им имена, тогда? Для целей общения. «Я использую шаблон X» имеет гораздо большую семантическую плотность, чем объяснение вашего решения в надежде, что другой конец пойдет «О да! Я тоже это сделал, за исключением того, что я назвал свои переменные ...».
Phoshi
6
@AJMansfield Некоторые из худших кодов, которые я видел, были связаны с чрезмерным энтузиазмом шаблонов проектирования.
Эрик Реппен
5
@ErikReppen вина за чрезмерное использование шаблонов дизайна должна быть отнесена к человеку, который делает это. С моей точки зрения, основная проблема не в самих шаблонах проектирования, а в чрезмерном обобщении (отчасти из-за отсутствия архитектурного надзора) и чрезмерном проектировании (иногда инженерными комитетами).
rwong
5
«Шаблоны проектирования» - это лексикон, а не техника.
Каз Дракон

Ответы:

76

Вы упускаете суть.

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

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

Итак, два ключевых момента, которые я пытаюсь сделать:

  1. Вы не можете не использовать шаблоны проектирования.
  2. Не зная названия предметов, которые вы используете, вам будет трудно работать в команде.
Telastyn
источник
12
+1: абсолютно верно. Я начал разработку ОО до того, как шаблоны проектирования стали известны или популярны. Да, мы также изобрели такие вещи, как фабрики, синглтоны и что-то такое, что, когда вы щурились на это в ярком свете, выглядит как шаблон Стратегии. Суть в том, что теперь я знаю шаблоны проектирования, я знаю, что фабрики были в порядке, но могли бы быть лучше, Синглтоны были выполнены плохо, и то, что могло бы быть шаблоном Стратегии, было бы намного лучше, если бы оно действительно было шаблоном Стратегии.
Двоичный беспорядок
3
... Изучение шаблонов проектирования и правильное их использование экономит вам столько времени, что вы с меньшей вероятностью попробуете заново изобрести колесо, помешаете вам вести себя по пути к плохому дизайну и создавать плохие решения. Смиритесь с этим и изучите шаблоны, используйте их, когда они работают на вас, и не используйте их, когда они не будут.
Binary Worrier
1
И это подводит итог именно моих взглядов на шаблоны. Они замечательные инструменты для общения, что вы делаете с другими людьми. Вы никогда не создаете их точно, потому что каждая проблема различна. Но это суть, направление и грубый набор руководств, которым нужно следовать, и это позволяет легко объяснить другим, какого черта вы делаете.
Мэтт D
+1 за сравнение с физическими структурами. Я хотел бы добавить, что это помогает построить дом, если вы уже знаете, что «ферма» - это хорошая конструкция, способная выдержать нагрузку на крышу, а не экспериментировать и надеяться, что она не рухнет.
kdgregory
39

Те, кто не может вспомнить прошлое, обречены повторять его.

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

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

devnull
источник
10
«Каждая цитата имеет равные и противоположные кавычки». «Мы должны разорвать прошлое, если мы действительно хотим заслужить будущее». (Хорошо, что это был Гитлер, так что, вероятно, лучше игнорировать это ....)
Рассел
20

С какими проблемами я могу столкнуться, если не буду использовать Шаблоны разработки программного обеспечения?

У вас будет проблема с невозможностью написать какое-либо программное обеспечение.

Переменные - это шаблон дизайна.

Методы - это шаблон дизайна.

Операторы - сложение, вычитание и т. Д. - это шаблон проектирования.

Заявления - это шаблон дизайна.

Значения - это шаблон дизайна.

Ссылки - это шаблон дизайна.

Выражения - это шаблон дизайна.

Классы - это шаблон дизайна.

...

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

Можете ли вы рассказать мне о проблемах подхода к дизайну с использованием стандартных объектно-ориентированных методов?

Я понятия не имею, что означает этот вопрос. Шаблоны проектирования - это «стандартные объектно-ориентированные методы» - вот что делает их шаблонами проектирования . Шаблон проектирования - это стандартная методика решения конкретной проблемы, особенно (хотя и не обязательно ) на объектно-ориентированном языке.

Эрик Липперт
источник
1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- Это (почти) определение шаблона проектирования - гибкая / легко повторно используемая конструкция кода, используемая для преодоления ограничений в самом языке, которая легко общается с другими. Как только это становится частью языка, это больше не шаблон проектирования.
Изката
1
@Izkata: Итак, ваша позиция такова, что, скажем, шаблон наблюдателя невозможен в C #, потому что C # имеет шаблон наблюдателя, встроенный в язык в форме событий? Это глупо. Специфичный для языка бит, который имеет отношение к шаблону, является каноническим способом реализации шаблона в языке. Конечно, шаблоны проектирования могут использоваться на языках, которые поддерживают их напрямую; в этом весь смысл поддерживать их напрямую!
Эрик Липперт
Я никогда не говорил невозможного, я пытался подразумевать ненужное . В Java, например , нет событий, поэтому для их моделирования используется шаблон проектирования.
Изката
@Izkata: я в замешательстве. Вы сказали, что если шаблон является частью языка, он больше не является шаблоном. Так является ли «шаблон наблюдателя» шаблоном в Java, а не шаблоном в C #?
Эрик Липперт
1
Или, другими словами, шаблон проектирования - это то, что программист делает, чем это можно описать на английском языке. Я не уверен, что полностью согласен с определением, но я думаю, что оно точно отражает то, что вы говорите, и, по крайней мере, не имеет субъективного суждения, которое считается образцом. Это свойство анализа того, что делают программисты, и, конечно, программист не может действовать таким образом, который не может быть проанализирован :-)
Стив Джессоп
4

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

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

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

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

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

Эрик Реппен
источник
2
легкий вес (не маховик). Прочтите первый абзац (и только первый абзац) статьи в Википедии, а затем посмотрите на Integer.valueOf (int) и подумайте, сколько раз это позволяет избежать создания новых целых чисел для общих значений.
2
@MichaelT И, черт возьми. Это было написано чертовски лучше, чем все, что я видел. Благодарю.
Эрик Реппен
Проблема, с которой я сталкиваюсь в большинстве инструкций шаблона проектирования, заключается в том, что они пытаются дать представление о большом проекте (книга GoF посвящена написанию текстового процессора, а не небольшой задачи). Но иногда они применимы к гораздо меньшим (почти «тривиальным») вещам. 7 строк кода могут четко описать навеску в том, что каждый постоянно использует. Гораздо проще понять, чем большие проекты или надуманные примеры.
1
@MichaelT Для меня это также хороший пример того, как небольшая ясность в чем-то полезна для написания кода в целом, даже если эта идея не имеет непосредственного использования в моем основном языке JavaScript, где для решения этой проблемы обычно используются наследование прототипов и замыкания. проблема. Тот момент а-ха все же дал мне некоторые идеи, которые актуальны.
Эрик Реппен
2

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

pgpb.padilla
источник
0

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

Visu
источник
-1

Вы используете шаблоны дизайна все время, не осознавая этого. Многие стандартные библиотеки на популярных языках разработаны с учетом шаблонов проектирования. Примером является FileReaderбиблиотека Java, которая разработана с использованием шаблона проектирования декоратора . Теперь, говоря о вашем собственном коде, вы не обязаны использовать шаблоны проектирования (в большинстве случаев). Шаблон проектирования - это «многократно используемое решение часто встречающейся проблемы» , то есть он поможет вам в написании более понятного и понятного кода, поэтому вам решать, сколько вы захотите избежать использования спагетти-кода.

Savv
источник