Изучение / внедрение шаблонов дизайна (для новичков) [закрыто]

85

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

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

(На всякий случай, я предпочитаю C #, но я могу учиться на примерах на других языках)

Эшлок
источник

Ответы:

84

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

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

и страница Википедии по шаблонам дизайна - лучшие ресурсы для новичков. FluffyCat - еще один хороший бесплатный онлайн-ресурс для шаблонов проектирования как на Java, так и на PHP .

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

Билл Ящерица
источник
4
Примеры кода C # для шаблонов проектирования Head First доступны на msquaredweb.com/DesignPatterns/…
инструментарий
5
Я посмотрел на эту книгу ... возненавидел ее. Так что я взял книгу GoF и узнал из нее все о шаблонах проектирования. Это было суховато, но гораздо информативнее.
Томас Оуэнс,
1
Сначала я подумал, что книга «Сначала голова» будет совершенно тошнотворной (в ней много метафор, отступлений и очень разговорный тон)… но на самом деле она действительно изобретательна и информативна; Я очень рад, что рискнул и купил его. Imo, выбор группы из четырех человек = ненужный мазохизм.
codeinthehole 02
2
Меня действительно тошнило от первой книги. Он так много времени тратит на то, чтобы «развлечься», я думаю, что он плохо передает ключевые идеи - они теряются. Читать это все равно что смотреть, как чей-то папа пытается быть крутым. Но книга GoF - это другая крайность и, следовательно, не для всех.
Draemon
2
@ Билл: Я знаю, но я согласен с комментариями @Thomas и @Draemon. Мои друзья, не ориентированные на программирование, которым рекомендовали эту серию книг по алгоритмам классов программирования, возненавидели их и в итоге перешли на «более сухие» книги, потому что количество информации на странице было больше. Это только вопрос предпочтений. Я читал технические книги с юных лет и ходил в высокотехнологичную среднюю школу, что, должно быть, заставило меня читать «сухие» книги. Я предпочитаю книги, в которых домашние животные не разговаривают со мной свысока и отвлекают, а скорее просто информацию, которую я могу усвоить.
Эстебан Кюбер,
27

Паттерны проектирования хороши по разным причинам:

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

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

  1. Head First Объектно-ориентированный анализ и дизайн (Head First) [ИЛЛЮСТРАЦИЯ] (Мягкая обложка)
  2. Применение UML и шаблонов (в твердом переплете)
  3. Agile-принципы, шаблоны и практики в C # (серия Роберта К. Мартина) (твердый переплет)

После этого вы готовы к базовой группе из четырех шаблонов проектирования.

  1. Шаблоны дизайна «Сначала голова» («Сначала голова») [ИЛЛЮСТРАЦИЯ] (Мягкая обложка)
  2. Библия
  3. Хороший сайт (ничего не покупайте, оно того не стоит) http://dofactory.com/Patterns/Patterns.aspx (некоторые реализации этого сайта заслуживают обсуждения

Следующий шаг:

  1. Шаблоны архитектуры корпоративных приложений (серия подписей Эддисона-Уэсли) (Твердый переплет)
  2. Книги POSA

И всегда помните: выкройка - это не цель!

KeesDijk
источник
2
Я думаю, что основ объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм и т. Д.) Достаточно, чтобы начать изучение шаблонов проектирования. Вы можете изучить другие принципы (высокий уровень сплоченности, принцип открытого и закрытого типа с низким уровнем связи, DRY, принцип замещения Лискова и т. Д.) Через шаблоны обучения.
Bill the Lizard
Я согласен, что вы можете изучить шаблоны проектирования, используя только основы объектно-ориентированного программирования. Но затем вы доходите до того, что можете заставить шаблон работать, но еще не до конца понимаете, почему это хороший дизайн, какие компромиссы вы сделали и как вы можете вносить изменения в шаблоны.
KeesDijk,
20

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

Леопольд Цимрман
источник
12
Или для тех, кто хочет сказать своим друзьям-программистам, что они прочитали книгу «Банда четырех» :)
Дэйв Маркл,
14

Мой совет:

Читайте много о паттернах из разных источников.

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

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

Во всяком случае, это то, что у меня сработало.

Ларс А. Бреккен
источник
9

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

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

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

Этот сайт также содержит руководство по антипаттернам , UML и рефакторингу .

pramodc84
источник
Я нашел сайт очень полезным. Хорошие, наглядные примеры.
Августа
8

У Брюса Экеля есть книга по шаблонам проектирования , хотя это Java, как и все его книги, потрясающе. И что самое лучшее, они бесплатные!

Ян Грессманн
источник
Спасибо за ссылку, не понимал, что это бесплатно онлайн.
Джеймс МакМахон
5

Вводная книга, которую я нашел полезной и хорошо написанной, - это Design Patterns Explained Аланом Шеллоуэем и Джеймсом Троттом (Аддисон Уэсли).

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

Как не начать с Банды Четырех книги, ибо это не вводная книга любыми средствами.

Федерико А. Рампони
источник
4

Я бы порекомендовал взглянуть на квинтологию (?) Жана Поля Будху о демистификации шаблонов дизайна на DNRtv, URL-адреса приведены ниже. Видеопередачи затрагивают, среди прочего, Синглтона, Абстрактную фабрику, с той лишь разницей, что вы можете наблюдать, как он пишет, пока он обсуждает теорию. Приятно присмотреть за обедом в дождливый будний день.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92

Дэвид Пайк
источник
DnrTV не работает! Это такой позор, потому что скриншоты Boodhoo информативны. Вы видели видео, размещенные где-нибудь еще? У вас есть видеофайлы, буду рад хранить их в сети.
Стефан Луис
4

Аннотация к приведенным выше комментариям.

Краткий справочник по шаблонам GOF

Вот хорошее место, где вы можете начать dofactory.com/patterns/patterns.aspx - вы можете найти ссылку на каждый шаблон вместе с соответствующими реализациями.

Однако помните, что это шаблоны GOF. Возможно, вам также понадобится прочитать и понять расширенные шаблоны, когда вы приобретете достаточно опыта в OOAD. Шаблоны проектирования Head First Design Patterns - хорошее начало, и после некоторого прогресса перейдите к шаблонам архитектуры корпоративных приложений Мартина Фаулера.

Применение шаблонов дизайна - процесс мышления

Еще один важный аспект - применение шаблонов дизайна так же важно, как и их знание. Чтение этих статей также может вам помочь.

Применение паттернов дизайна, часть I

Применение паттернов дизайна, часть 2

Надеюсь это поможет

поражает святой
источник
3

Шаблоны проектирования Head First Design Patterns хорош, как и другие уже отмеченные. Помимо этого, конечно же, оригинальная книга и C # Design Patterns. Также уже упоминались хорошие сайты.

Помимо самообучения, я серьезно рекомендую начать или посещать группу по изучению шаблонов в вашем районе. См. «Учебное руководство по шаблонам проектирования» для объяснения и прекрасного порядка изучения шаблонов. Мы сделали это, и я могу честно сказать, что я бы не понял так много, как сейчас. Еженедельные встречи с другими заинтересованными людьми на удивление дисциплинируют вас при изучении чего-то абстрактного, например, шаблонов проектирования.

Удачной учебы!

mmiika
источник
3

Прежде чем тратить деньги на книги, я бы порекомендовал отличную страницу шаблонов дизайна Википедии . Также поищите в Google что-то другое по запросу "шаблоны дизайна" или выполните поиск по запросу "шаблоны дизайна" на YouTube. . Представление одной и той же информации по-разному часто помогает упасть.

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

Текст Head First Design Patterns гораздо более доступен, но содержит только подмножество шаблонов Gang of Four.

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

Просто продолжай подключаться.

Ройд Брейшай
источник
2

Паттерны архитектуры корпоративных приложений (в твердом переплете) Мартина Фаулера

Рефакторинг под шаблоны (твердый переплет) Джошуа Кериевски

Непрерывная интеграция: повышение качества программного обеспечения и снижение риска (мягкая обложка) Пол Дюваль и др.

За пределами архитектуры программного обеспечения: создание и поддержка успешных решений (мягкая обложка) Люка Хоманна

Эли
источник
2

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

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

Билл К
источник
Книги POSA не создавались по образцу книги GOF - GOF оказался первым изданным - они выпускались в то же время.
Тим
1
Чтобы избежать путаницы, я хочу сказать, что БОЛЬШИНСТВО шаблонов проектирования НЕ реализовано в библиотеке. Многие шаблоны образуются путем объединения библиотечных классов вместе.
Bill the Lizard
Я сказал, что это можно сделать в библиотеке - извините за это, Билл, спасибо за пояснение. Шаблоны проектирования, как правило, подобны библиотекам, но вещи, которые вы обычно не можете ПОЛУЧИТЬ в библиотеке, например, различные способы взаимодействия неизвестных друг другу классов.
Bill K,
2

Для веб-сайтов очень хороший сайт http://ajaxpatterns.org от одного из разработчиков веб-сайта ajaxian.

Кен Пенн
источник
2

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

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

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

ddaa
источник
2

Применение UML и шаблонов Крейга Лармана. Начните с основ анализа, проектирования и используйте простой сценарий случая. В простой форме знакомит с большинством основных паттернов.

скинп
источник
2

Если вы прочитаете о шаблонах проектирования, вы заметите, что в Java, похоже, реализованы некоторые из них.

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

Шаблоны проектирования не для ленивых программистов.

Питер Тернер
источник
2

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

Самнанг
источник
1

Я также предлагаю немного поработать с Refactoring to Patterns. только вы прочитаете Head First Design Patterns.

Примечание. Примеры кода написаны на Java, но должны быть очень похожи на примеры C # ...

Инструментарий
источник
1

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

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

ИЗМЕНИТЬ Чтобы прояснить - многие шаблоны проектирования являются результатом проблем, обнаруженных в некоторых областях. Вряд ли новый программист (ИМО) знает шаблон (ы) проектирования, который следует использовать для некоторого набора проблем. Подобно тому, как мы получаем небольшое количество алгоритмов в исследованиях CS, нам нужно понимание того, что мы можем делать с шаблонами и их преимущества, но когда человек все еще строит hello world или открывает для себя stl, практической необходимости в шаблонах проектирования не возникает. Выкройки отличные. Но они не серебряная пуля.

(Ни CASE (инструменты), ни UML, ни SCRUM, ни TDD, ни STL, ни Java, ни XML и т. Д.). Все это лишь аспекты нашей профессии, и рассматривать эти темы как вторые приход наивен.

Тим
источник
Но если вы не знаете о шаблонах, вы не узнаете, есть ли какой-то, который решает вашу конкретную проблему. Да, как новичку, вам вряд ли понадобится шаблон, но важно изучить шаблоны до того, как возникнет такая необходимость.
Эли
Думаю, я рассказал об этом в своем посте ...
Тим
Вам нужно больше, чем просто знать, что они существуют ... вам нужно знать, как они работают и в каких ситуациях они используются. Это немного больше, чем поверхностные знания. Могут пройти годы, прежде чем вы начнете использовать выкройку, но когда вы это сделаете, не время изучать ее.
Эли
То есть вы говорите, что новичок должен изучить и понять десятки или больше шаблонов? Что тем временем выходит из-под контроля? Я не спорю против шаблонов. И я также не считаю, что изучение специфики шаблона JIT - это плохо. Изучение паттернов раньше других вещей ИМО бесполезно
Тим
1

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

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

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

Донгилмор
источник
1

Как только вы поймете концепцию, просмотрите исходный код Eclipse или дизайн, множество действительно хороших примеров этих шаблонов (неудивительно, что Гамма был одним из разработчиков).

Ури
источник