Есть ли каноническая книга по шаблонам дизайна? [закрыто]

49

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

Существует ли книга, которая является стандартом де-факто для описания лучших практик, методологий проектирования и другой полезной информации о шаблонах проектирования? Что из этой книги делает ее особенной?

mW00t
источник
Я не уверен, что это то, о чем вы думаете, но я нашел много умных вещей для разработки на Forrst .
Трей Пипмайер
2
Как насчет заголовка «Справочные источники для шаблонов проектирования» или «Ресурсы шаблонов проектирования» (поскольку я не имею в виду «ссылка», а просто «поиск по требованию») и перемещения всех элементов списка в тело (или удаления его) )?
Для некоторых приличных реализаций я обычно смотрел на те, что были на dofactory (хотя книги не покупал).
Стивен Эверс
4
Поскольку на этот вопрос был получен полный и исчерпывающий ответ, я закрыл другие вопросы о шаблонах проектирования как дубликаты этого вопроса, чтобы обозначить его как каноническую пару вопросов и ответов для этой темы.

Ответы:

58

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения очень близки к моему определению канонической книги по шаблонам проектирования. Согласно статье в Википедии (выделено мое):

Первоначальная дата публикации книги была 21 октября 1994 года с авторским правом 1995 года, а по состоянию на июль 2010 года книга была в 38-м издании . Книга была впервые представлена ​​широкой публике на совещании OOPSLA, состоявшемся в Портленде, штат Орегон, в октябре 1994 года. Оно оказало большое влияние на область разработки программного обеспечения и рассматривается как важный источник теории и практики объектно-ориентированного проектирования. Более 500 000 экземпляров было продано на английском и 13 других языках .

Уорд Каннингем , пионер шаблонов дизайна, ведет онлайн-каталог образцов книг на WikiWikiWeb . И согласно статье в Википедии о шаблоне проектирования (опять же, акцент мой):

Шаблоны проектирования приобрели популярность в компьютерных науках после того, как книга «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения» была опубликована в 1994 году так называемой «Бандой четырех» (Gamma et al.).

В той же статье упоминается немало других книг, упоминаемых в жанре:

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

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

«Head First» - это серия вводных инструктивных книг по многим темам, изданных O'Reilly Media. В нем подчеркивается неортодоксальная, визуально насыщенная, захватывающая читателя комбинация головоломок, шуток, нестандартного дизайна и макета, а также увлекательный разговорный стиль, позволяющий погрузить читателя в данную тему.

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

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

Яннис
источник
2
+1. На самом деле я хотел дать вам +5, но, увы, это запрещено.
Дипан Мехта
Вся серия Pattern-Oriented Software Architecture посвящена шаблонам в различных типах систем - том 1 посвящен архитектурным шаблонам и шаблонам, которые пересекают домены, том 2 - параллельным системам, том 3 - управлению ресурсами в сетевых / распределенных системах, Том 4 посвящен распределенным системам, а том 5 - языкам шаблонов, а также справочнику для остальных четырех томов. Учитывая вопрос, я думаю, что Том 5 также может быть применим, но я не провел слишком много времени с ним ... пока.
Томас Оуэнс
@ Яннис, этот и первый, как правило, основаны на статических типизированных языках. Есть ли хорошие книги для динамических языков, таких как python.
ravi404
@ ravi404 norvig.com/design-patterns
Whytheq
27

Книга «Банда четырех» - « Шаблоны проектирования: элементы многократно используемого объектно-ориентированного программного обеспечения» , вероятно, ближе всего к промышленному стандарту по шаблонам проектирования.

Для более доступного введения глава First: Design Patterns тоже хороша. Не откладывайте на «модную» обложку, так как она хорошо читается и, возможно, поможет вам понять концепции книги GoF намного проще, если вы сначала прочитаете ее.

richeym
источник
23

Head First Design Patterns

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

Вы хотите узнать о закономерностях, которые имеют значение - зачем их использовать, когда их использовать, как их использовать (и когда их НЕ использовать). Но вы не просто хотите увидеть, как шаблоны выглядят в книге, вы хотите знать, как они выглядят «в дикой природе». В их родной среде. Другими словами, в реальных приложениях. Вы также хотите узнать, как шаблоны используются в Java API и как использовать встроенную поддержку шаблонов Java в вашем собственном коде.

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

Самое главное, что вы хотите выучить «секретный язык» шаблонов проектирования, чтобы вы могли держать себя в руках со своим коллегой (и произвести впечатление на гостей коктейльной вечеринки), когда он случайно упоминает о своем потрясающе умном использовании команд, фасадов, прокси и Фабрика между глотками мартини. Вы легко будете противостоять своему глубокому пониманию того, почему Singleton не так прост, как кажется, как часто так неправильно понимают Factory, или реальных отношений между Decorator, Facade и Adapter.

С Head First Design Patterns вы избежите смущения, думая, что Decorator - это что-то из шоу "Торговые пространства" ...

Гордон
источник
Этот. Это очень доступно для чтения и полностью изменило мой подход к разработке программного обеспечения.
GSto
2
Вся голова первой серии великолепна, особенно для начинающих разработчиков.
Томас Сток
2
Я люблю книгу, но абсолютно ненавижу обложку! Однажды мой коллега, не являющийся программистом, прогуливался по моему офису, увидел книгу и сказал: «Руководитель первых дизайнерских моделей? Вы собираетесь заниматься модным бизнесом?»
Пит
1
@ Пит Почему крышка может доставить вам больше неприятностей. Она, очевидно, живет двойной жизнью. fishbowl.pastiche.org/2005/08/12/…
Гордон
10

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

Jonas
источник
Также книга Мартина Фаулера: amazon.com/Patterns-Enterprise-Application-Architecture-Martin/…
Роберт Харви,
Это не книга о шаблонах дизайна. Это каталог моделей. Вначале есть краткое введение в шаблоны проектирования, но я не думаю, что этого достаточно.
Йорг Миттаг
@ JörgWMittag Не существует уникального процесса создания шаблонов дизайна, шаблоны проектирования - это относительно небольшие решения многократного использования. Шаблоны проектирования создаются посредством обычных процессов разработки программного обеспечения, и их отличает их огромное повторное использование. Единственный релевантный уникальный процесс - это идентификация решения как шаблона проектирования, и каталоги делают это прекрасно.
Яннис
9

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения

альтернативный текст

Из википедии :

Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения - это книга по разработке программного обеспечения, описывающая повторяющиеся решения общих проблем в разработке программного обеспечения. Авторы книги - Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес с предисловием Грэди Буча. Авторы часто упоминаются как Банда Четырех, GoF или Go4. Книга разделена на две части: первые две главы посвящены возможностям и недостаткам объектно-ориентированного программирования, а остальные главы посвящены 23 классическим шаблонам проектирования программного обеспечения. Книга включает в себя примеры на C ++ и Smalltalk.

Пирс Майерс
источник
3

Один из лучших сайтов шаблонов дизайна - Ward's Wiki, самая первая вики. Смотрите http://c2.com/cgi/wiki?HistoryOfPatterns для хорошей стартовой страницы в нем.

В 1987 году Уорд и Кент консультировались с группой Tektronix Semiconductor Test Systems Group, у которой были проблемы с завершением проектирования. Они решили попробовать шаблонные вещи, которые изучали. Как и Александр, который сказал, что его должны спроектировать жители здания, Уорд и Кент позволили представителям пользователей (тренеру и полевому инженеру) закончить проект.

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

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

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

Брюс Андерсон выступил с докладом на TOOLS 90, на котором присутствовал ErichGamma; Эриху понравился разговор. Брюс выступил с докладом в EcoopOopsla90 (Оттава) и руководил BOF под названием « На пути к руководству по архитектуре», где он, Эрих Гамма, Ричард Хелм и другие обсуждали шаблоны. Это был первый раз, когда Ричард и Эрих встретились, и они поняли, что разделяют общие идеи о ключевых идеях, лежащих в основе написания программного обеспечения многократного использования.

Незадолго до ECOOP'91 Эрих Гамма и Ричард Хелм, сидя на крыше в Цюрихе в душный летний день, собрали очень скромные начала каталога моделей, которые в конечном итоге станут DesignPatterns ...

Вещи действительно пошли в гору на семинаре OOPSLA, который Брюс провел в 1991 году. По совпадению, Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес были все там; позже они станут Бандой четырех, которая является автором книги « Шаблоны проектирования» ...

Gaurav
источник
2

Я думаю, что рефакторинг к шаблонам может быть полезен просто потому, что он описывает, как определенный дизайн / код может быть реорганизован к шаблонам в книге GoF. Это может помочь преодолеть начальную кривую обучения. О, и это также размышляет над 'Образцом-счастьем' :)

Вы также можете найти первые три тома Pattern-Oriented Software Architecture для чтения.

Финрод
источник
1

Шаблоны проектирования

Этот учебный сайт содержит следующие подразделы

  • Намерение каждого шаблона дизайна
  • Структура реального мира для шаблона проектирования
  • Постановка проблемы
  • Детальное обсуждение проблемы
  • Контрольный список о том, как прийти к шаблону
  • Правила большого пальца при достижении шаблона.
  • Фрагменты кода для шаблона проектирования, который включает в себя C #, C ++, Delphi, Java и PHP

Этот сайт также содержит руководство по Anti Patterns, UML и Refactoring.

pramodc84
источник
На первый взгляд, сайт SourceMaking выглядит упрощенно, но он действительно отличный справочник. Помимо шаблонов проектирования, некоторые из антипаттернов разработки, архитектуры и управления проектами очень веселые. Реорганизованные решения могут реально помочь вам сохранить встречу, которая сходит с рельсов. (Не плохо для справки дизайн шаблона)
Безотносительно
1

Оригинальная книга «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения» является хорошим ресурсом для объектно-ориентированных шаблонов проектирования.

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

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

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

indyK1ng
источник
1

«Гибкие принципы, шаблоны и практики в C #» Роберта Мартина. Я думаю, что у него также есть версия книги на Java.

Кроме того, не сам шаблон, а Domain Driven Design имеет несколько отличных концепций, даже если вы не используете полный подход DDD.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

источник
1

Если вас особенно интересуют шаблоны проектирования в C ++, попробуйте Modern C ++ Design от Андрея Александреску.

В этой книге рассказывается о том, как реализовать часто используемые шаблоны, такие как Factory, Singleton и Visitor, в C ++. В нем также обсуждаются очень специфичные для C ++ темы, такие как умные указатели, метапрограммирование шаблонов и дизайн классов на основе политик.

Автор книги - авторитетный эксперт , известный своими

новаторская работа над политическим дизайном, реализованным с помощью шаблонного метапрограммирования. Эти идеи сформулированы в его книге « Современный дизайн C ++» и впервые были реализованы в его библиотеке программирования Loki. Он также реализовал концепцию «перемещения конструкторов» в своей библиотеке MOJO. Он принимал участие в Журнале пользователей C / C ++ под заголовком «Generic <Programming>» ...

Дима
источник
1
Вы не могли бы объяснить больше о том, что он делает и для чего он хорош? «Ответы только на ссылки» не очень приветствуются на Stack Exchange
gnat
@gnat: как это?
Дима
Хорошо, ваше недавнее редактирование, безусловно, выглядит улучшением для меня. Хотя читатели ответа, вероятно, выиграют от более подробного объяснения того, кто такой Александреску
комнат
@gnat: так как вы, очевидно, знаете, кто он, пожалуйста, не стесняйтесь редактировать мой ответ.
Дима