Как изучать шаблоны проектирования? [закрыто]

352

Я прочитал около 4-5 книг по шаблонам проектирования, но все же не чувствую, что приблизился к промежуточному уровню в шаблонах проектирования?

Как мне пойти изучать шаблоны дизайна?

Есть ли хорошая книга для шаблонов дизайна?

Я знаю, что это придет только с опытом, но должен быть какой-то способ справиться с этим?

Ананд
источник
6
Лучший способ узнать шаблон дизайна - это сделать проект. Когда вы видите образцы в проекте вы будете знать , когда использовать их здесь является статья , которая учит шаг дизайн шаблона на этапе с проектом codeproject.com/Articles/1009532/...
Shivprasad Koirala
1
Взгляните также на Antipatterns deviq.com/antipatterns
разработчик,
Вы можете узнать это здесь, play.google.com/store/apps/…
Кейур Тумар
Возможно, поздно, но все же может помочь кому-то .. попробуйте geeksforgeeks.org/software-design-patterns, чтобы понять основы и сценарии, объясняющие, где их можно использовать. Помог мне понять основы и цели каждого шаблона
Zeetit
Смотрите также, Pluralsight: pluralsight.com/courses/patterns-library
ssmith

Ответы:

206

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

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

Джозеф Феррис
источник
11
Точно! Меня всегда удивляло, что программное обеспечение подпадает под «Компьютерные науки». Я вижу аргумент в пользу аппаратного обеспечения, но программное обеспечение делает науку очень неточной!
Джозеф Феррис
К сожалению, этот ресурс больше не доступен :(.
5
@NielsW Это возможно, возможно, это было только временно.
Утом
211

Я прочитал три книги и до сих пор не очень хорошо разбирался в шаблонах, пока не прочитал « Первые шаблоны дизайна от OReilly». Эта книга открыла мне глаза и действительно хорошо объяснила.

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

Даррен С
источник
14
Поначалу немного странно читать «серьезную» книгу, которая выглядит так, но, продолжая читать, я заметил, что на самом деле понимаю концепции для изменения. Определенно стоит прочитать.
Тим Уиткомб
18
Я определенно думаю, что это лучшая книга для изучения шаблонов дизайна. Книгу GoF следует использовать в качестве справочной, после того, как вы их лучше поймете.
Билл Ящерица
Вы упомянули, что прочитали 3 книги .. Вы читали и эту? amazon.com/… если так, что вы думаете?
Сивабуд
11
Я встретил Эриха Гамму (одного из GoF) на конференции в Нант, Франция, в 2006 году, и он сказал, что эта книга лучше, чем книга GoF :)
Fuhrmanator
1
Прочитав эту книгу, ОО обрел смысл. @SimpleFellow Книга GoF скучная. Без предварительных знаний о шаблонах дизайна это заставит вас заснуть в кратчайшие сроки. Это, однако, хорошо ( ) справочник и должны быть частью любой библиотеки профессионалов вместе с DDD и Р EAA.
mbx
93

Мои два цента за такой и старый вопрос

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

  1. Изучаем тест-ориентированную разработку (TDD)
  2. Научитесь рефакторингу
  3. Выучить шаблоны

Большинство людей игнорируют 1, многие считают, что они могут сделать 2, и почти все идут прямо на 3.

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

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

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

SystematicFrank
источник
может у рекомендовать некоторые книги для TDD и рефакторинг главно в C ++
Ананд
2
У вас будет много проблем с поиском качественного контента, если вы ограничитесь C ++. Кроме того, C ++ - это не тот язык, на котором вы хотите изучать тестирование, потому что технически в нем не хватает размышлений, что само по себе крайне затрудняет создание хороших инструментов тестирования. Это все еще выполнимо, но сообщества, форумы, обсуждения и количество людей, занимающихся TDD, составляют меньшинство в C ++ из-за этого. Я много с ним работал, но, несмотря на его сильные стороны, это не тестовый язык.
SystematicFrank
62

Дерек Банас (Derek Banas) создал учебные пособия для YouTube по разработке шаблонов, которые мне очень нравятся

http://www.youtube.com/playlist?list=PLF206E906175C7E07

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

Педро Дуарте
источник
35

Практика, практика, практика.

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

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

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

Это действительно то же самое, что и кодирование; K & R может быть «библией» для C, но чтение ее от корки до корки несколько раз просто не дает практического опыта; Там нет замены для опыта.

Пол Сонье
источник
5
+1. Я думаю, что многие новички слишком быстро внедряются в шаблоны проектирования и начинают проектировать системы, построенные вокруг абстрактных фабрик, одиночных игр, наблюдателей, посетителей и т. Д., Прямо из книги. Результат часто неуклюжий, не позволяет наилучшим образом использовать язык и даже не очень хорошо продуман с точки зрения базовой связи / сплоченности (последний особенно страдает, когда шаблоны проектирования плохо реализованы). Требуется опыт, чтобы решить, где шаблоны проектирования подходят, и даже больше, чтобы решить, как наиболее правильно реализовать их на определенном языке.
stinky472
25

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

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

utku_karatas
источник
15

Задайте себе эти вопросы:

Что они делают?

Что они отделяют / пара?

Когда вы должны их использовать?

Когда вы не должны их использовать?

Какая недостающая языковая особенность заставит их уйти?

Какой технический долг вы берете на себя, используя его?

Есть ли более простой способ выполнить работу?

gtrak
источник
14
и, наконец, спросите себя, откуда взять ответы на все вышеупомянутые вопросы
Джатин Дхут
@JatinDhoot, думая ..
gtrak
8

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

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

Удачи

Тим
источник
+1 за понимание проблем, для решения которых они предназначены. Задача состоит в том, чтобы увидеть проблемы из первых рук (в реальном проекте, который имеет личное значение). Слишком много примеров проблем в книгах (слишком) упрощены. Одна из причин, по которой мне нравится книга Head First Design Patterns, заключается в том, что они показывают некоторые проблемы с наивными решениями и то, насколько несостоятельны эти решения. Затем они представляют шаблон и насколько он чист ... Посмотрите, например, на Decorator в этой книге.
Фурманатор
8

Много хороших примеров было дано. Я хотел бы добавить один:

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

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

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

Йоахим Зауэр
источник
7

Вы читали "Объясненные шаблоны дизайна" Аллана Шаллоя.

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

Проблемы могут быть разложены на две части: общие вещи и разные вещи. Как только это будет сделано, мы сопоставим общие вещи с интерфейсом, а вещи - с реализацией. По сути, многие паттерны попадают в этот «паттерн».

Например, в шаблоне «Стратегия» общие вещи выражаются в контексте стратегии, а переменные части выражаются в виде конкретных стратегий.

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

Филипп Нган
источник
6

Вы пробовали книгу «Банда четырех»?

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

Рохит
источник
7
Я не рекомендовал бы эту книгу как «открывающую глаза» книгу
Geo
73
Я рекомендовал бы это как закрывающую глаза книгу. Несколько страниц этого тома перед сном и ваша бессонница останутся в прошлом.
День
2
пришел сюда после того, как я заснул в середине дня, читая эту книгу. искал «понимание шаблонов проектирования». нашел пост. нашел комментарий выше. сделал мой день. Согласитесь с другими, это закрывающая книга
цель
5

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

Дэвид Неем
источник
4

Я привел несколько групп обсуждения шаблонов проектирования ( наш сайт ) и прочитал 5 или 6 книг по шаблонам. Я рекомендую начать с книги «Head First Design Patterns» и посетить или начать дискуссионную группу. Поначалу книга «Head First» может показаться немного хасборо, но большинству людей она понравится после прочтения главы или двух.

Используйте выдающийся ресурс - «Учебное руководство по проектированию шаблонов» Джошуа Кереивиски, чтобы упорядочить шаблоны и помочь своей дискуссионной группе. Исходя из опыта, единственное изменение, которое я предлагаю при оформлении заказа, - это поставить стратегию на первое место. Большинство современных разработчиков испытали некоторое хорошее или плохое воплощение Фабрики, поэтому начало работы с Фабрикой может привести к большому разговору и путанице в шаблоне. Это имеет тенденцию отвлекать внимание от того, как изучать и изучать шаблоны, что довольно важно при этом. первая встреча.

Дж. Б. Браун
источник
3

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

Раджкумар Васан
источник
2

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

JB King
источник
2

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

Что касается моего личного фаворита, мне нравятся Head First Design Patterns, опубликованные O'Reilly. Это написано разговорным голосом, который обращается ко мне. Когда я читал его, я в то же время просматривал свой исходный код, чтобы увидеть, относится ли он к тому, что я читал. Если это так, я рефакторинг. Так я узнал «Цепочку ответственности».

Практика - Практика - Практика.

Джейсон Слокомб
источник
2

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

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

Билл К
источник
2

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

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

rmeador
источник
2

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

О ресурсах вы можете проверить эти

  1. www.dofactory.com
  2. Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения (серия профессиональных вычислений Addison-Wesley) Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона и Джона М. Влиссидеса
  3. Шаблоны корпоративной архитектуры приложений от Мартина Фаулера

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

Мои 2 цента ...

Perpetualcoder
источник
1

Я думаю, что также сложно изучать шаблоны проектирования. Вы должны знать больше об ООП и некотором опыте разработки приложений от среднего до крупного. Для меня, я учусь как группа разработчиков, чтобы сделать обсуждение. Мы следуем Учебному руководству по разработке шаблонов, чтобы они закончили изучение шаблонов. Есть разработчики C # и JavaScript объединяются. Мне кажется, что разработчик C # пишет коды на JavaScript, а разработчик JavaScript делает то же самое для кодов C #. После того, как я покидаю собрание, я также занимаюсь исследованиями и читаю несколько книг дома для ознакомления. Лучший способ понять больше и помнить, на мой взгляд, это вести блог с примерами на C # и JavaScript здесь http://tech.wowkhmer.com/category/Design-Patterns.aspx .

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

например:

Заводской метод:

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

Программирование: клиент просто передает значение параметра $ 5, $ 10 или $ 20 фабричному методу и возвращает объект Pizza обратно. Таким образом, клиент может использовать этот объект, не зная, как он обрабатывает.

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

Vorleak Chy
источник
Вторая ссылка в ответе мертва.
Панг
1

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

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

Дэвид Роббинс
источник
1

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

Книга поможет вам понять основные понятия, если, пока вы не внедрились в реальный мир, вы НЕ МОЖЕТЕ БЫТЬ МАСТЕРОМ ДИЗАЙН-ДИЗАЙНОВ

gmhk
источник