Як вивчити шаблони дизайну? [зачинено]


352

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

Як слід перейти до вивчення моделей дизайну?

Чи є якась хороша книга для дизайнерських моделей?

Я знаю, що це прийде лише з досвідом, але повинен бути якийсь спосіб оволодіти цим?


6
Найкращий спосіб дізнатися модель дизайну - це зробити проект. Коли ви побачите шаблони в проекті, ви дізнаєтесь, коли ними користуватися, ось стаття, яка навчає шаблону проектувати крок за кроком із проектом codeproject.com/Articles/1009532/…
Shivprasad Koirala

1
Ознайомтеся і з Антипатрон, а також deviq.com/antipatterns
Розробник

Ви можете дізнатися це звідси, play.google.com/store/apps/…
Keyur Thumar

Можливо, пізно, але все-таки може допомогти комусь. Спробуйте geeksforgeeks.org/software-design-patterns, щоб зрозуміти основи та сценарії, пояснені, де їх можна використовувати. Допомогли мені зрозуміти основу та мету кожного зразка
zeetit

Дивіться також, Pluralsight: pluralsight.com/courses/patterns-library
ssmith

Відповіді:


206

Найкращий спосіб - почати кодування з ними. Шаблони дизайну - це чудова концепція, яку важко застосувати, лише читаючи про них. Візьміть декілька зразкових реалізацій, які ви знайдете в Інтернеті, та створіть навколо них.

Чудовим ресурсом є сторінка " Фабрика даних і об'єктів ". Вони переходять шаблони і дають вам як концептуальні, так і реальні приклади світу. Їх довідковий матеріал теж великий.


11
Саме так! Мене завжди цікавило, що програмне забезпечення підпадає під "Комп'ютерні науки". Я можу бачити аргумент для апаратного забезпечення, але програмне забезпечення робить дуже неточною наукою!
Джозеф Ферріс

На жаль, цей ресурс більше недоступний :(.

5
@NielsW Це вгору, можливо, це було лише тимчасове вниз.
uthomas

211

Я прочитав три книги і все ще не дуже добре зрозумів зразки, поки не прочитав керівник OReilly. Ця книга відкрила мені очі і справді добре пояснила.

alt текст


14
Спочатку трохи дивно читати "серйозну" книгу, яка виглядає так, але, читаючи, я помітив, що насправді розумію поняття для зміни. Однозначно варто прочитати.
Тім Віткомб

18
Я, безумовно, думаю, що це найкраща книга для вивчення моделей дизайну. Книгу GoF слід використовувати як орієнтир після того, як ви краще їх зрозумієте.
Білл Ящірка

Ви згадали, що прочитали 3 книги ... Чи читали ви і цю? amazon.com/… якщо так, що ви думали?
sivabudh

11
Я зустрівся з Еріхом Гаммою (одним із Гофінів) на конференції в Нанті, Франція, у 2006 році, і він сказав, що ця книга продає книгу GoF :)
Фурманатор,

1
Прочитавши цю книгу, О.О. @SimpleFellow Книга GoF нудна. Без попередніх знань про дизайнерські зразки, ви можете спати в найкоротші терміни. Це, однак, добре ( ) довідник і повинні бути частиною будь-якої бібліотеки професіоналів разом з DDD і Р EAA.
mbx

93

Мої два центи за таке і старе питання

Деякі люди вже згадували, практикують і рефакторинг. Я вважаю, що правильний порядок дізнатися про закономірності такий:

  1. Дізнайтеся про розвиток тестових програм (TDD)
  2. Дізнайтеся про рефакторинг
  3. Вивчіть шаблони

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

Для мене ключовим вдосконаленням моїх програмних навичок було вивчення TDD. Це може бути довгий час болісного і повільного кодування, але спочатку написання тестів, безумовно, змушує задуматися над своїм кодом. Якщо класу потрібно занадто багато котла або легко виходить з ладу, ви починаєте помічати неприємні запахи досить швидко

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

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


Ви можете порекомендувати кілька книг для TDD та рефакторингу переважно на C ++
Ананд

2
У вас виникне багато проблем з пошуком якісного вмісту, якщо ви звузите до C ++. Крім того, C ++ - це не мова, на якій ви хочете вивчити тестування, оскільки технічно їй не вистачає рефлексії, що само по собі робить надзвичайно складним створення хороших інструментів тестування. Це все ще можливо, але спільноти, форуми, обговорення та кількість людей, що займаються TDD, є меншиною в межах C ++ через це. Я багато працював з цим, але, незважаючи на його сильні сторони, це не є тестовою дружньою мовою.
SystematicFrank


35

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

Ви можете читати про гру на віолончелі роками, а ще не в змозі покласти уклін на інструмент і зробити все, що звучить як музика.

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

Там, де вони стають корисними, це коли ви розпізнаєте шаблони дизайну в коді інших осіб або розпізнаєте проблему на етапі проектування, яка добре відповідає візерунку; а потім вивчити формальну схему та вивчити проблему та визначити, яка дельта між ними, і що це говорить і про шаблон, і про проблему.

Це дійсно те саме, що кодування; K&R може бути "Біблією" для C, але читання її "до обкладинки" кілька разів просто не дає жодного практичного досвіду; немає ніякої заміни для досвіду.


5
+1. Я думаю, що багато новачків занадто швидко перестрибують у схеми дизайну і починають проектувати системи, побудовані навколо абстрактних фабрик, одинаків, спостерігачів, відвідувачів тощо просто з книги. Результат часто буває важким, не найкраще використовує мову і навіть не дуже добре розроблений з базової точки зору з’єднання / згуртованості (останній особливо страждає, коли дизайнерські структури реалізовані погано). Потрібен досвід, щоб вирішити, де шаблони дизайну підходять, і ще більше, щоб вирішити, як найбільш доцільно реалізувати їх певною мовою.
stinky472

25

Практикувати практику практику. Я думаю, що 4 - 5 книг - це навіть надмірне заняття читанням, не маючи хорошої практики. Найкращий спосіб зробити це, я вважаю, почати рефакторинг своїх поточних проектів за допомогою шаблонів. Або якщо у вас немає проектів, над якими ви активно працюєте, просто зробіть це по-своєму, а потім спробуйте рефакторинг на шаблони .

Ви не можете їх оцінити повною мірою, якщо ви не зазнали проблем, які вони вирішують. І майте на увазі, що це не срібні кулі - вам не потрібно їх запам’ятовувати та наполегливо застосовувати на льоту. Мої два центи ..


15

Задайте собі ці питання:

Що вони роблять?

Що вони розв'язують / парують?

Коли ви повинні їх використовувати?

Коли ви не повинні їх використовувати?

Яка відсутність мови могла б змусити їх піти?

Який технічний борг у вас виникає, використовуючи його?

Чи є простіший спосіб виконати роботу?


14
і нарешті запитайте себе, звідки отримати відповіді на всі вищезазначені питання
Джатін Дхут

@JatinDhoot подумавши ..
gtrak

8

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

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

Удачі


+1 для розуміння проблем, які вони мають намір вирішити. Завдання полягає в тому, щоб побачити проблеми з перших рук (на реальному проекті, який має особисте значення). Занадто багато прикладних проблем у книгах (над) спрощено. Однією з причин, що мені подобається у книзі «Шаблони перших моделей дизайну», є те, що вони показують деякі проблеми з наївними рішеннями та наскільки непереборні ці рішення. Потім вони представляють візерунок і наскільки він чистий ... Наприклад, ознайомтеся з «Декоратором» у цій книзі.
Фурманатор

8

Наведено багато хороших прикладів. Я хочу додати:

Неправильно застосовувати їх. Вам не потрібно робити це навмисно, це станеться, коли ви спробуєте застосувати їх у початковому дизайні-підгонці. За цей час кожна окрема проблема, яку ви побачите, здається, відповідає точно одному дизайну. Часто проблеми чомусь здаються, що чомусь відповідають одній і тій же схемі дизайну (Сінгелтон є головним кандидатом на це).

І ви застосуєте візерунок, і це буде добре. А через кілька місяців вам потрібно буде щось змінити в коді і побачити, що використання цього конкретного шаблону було не таким розумним, тому що ви зашифрували себе в кут і вам потрібно знову рефакторувати.

Зрозуміло, це насправді не відповідь "що-і-що" ти дізнаєшся за 21 день, але, на моєму досвіді, це, швидше за все, дасть тобі добре зрозуміти питання.


7

Ви читали "Пояснені шаблони дизайну", автор Аллан Шаллоуей.

Ця книга сильно відрізняється від інших дизайнерських книг, оскільки це не стільки каталог візерунків, а в першу чергу представляє спосіб розкладання проблемного простору, який легко відображає шаблони.

Проблеми можна розкласти на дві частини: речі, які є загальними, і речі, які відрізняються. Після цього ми відображаємо загальні речі на інтерфейс і речі, які залежать від реалізації. По суті, в цей «візерунок» потрапляє багато моделей.

Наприклад, у структурі стратегії загальні речі виражаються як контекст стратегії, а змінні частини виражаються як конкретні стратегії.

Мені здалося, що ця книга сильно думає, що провокує, на відміну від інших книжок з малюнками, які для мене мають такий же ступінь хвилювання, як читання телефонної книги.


6

7
Я б не рекомендував цю книгу як "відкриваючу очей" книгу :)
Гео

73
Я б рекомендував це як закриваючу очі книгу. Кілька сторінок цього фамозу перед сном і ваше безсоння будуть справою минулого.
Dónal

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


4

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

Використовуйте видатний ресурс - Посібник з навчання Джошуа Керевісського для створення шаблонів для впорядкування шаблонів та для допомоги вашій дискусійній групі. Не маючи досвіду, одна зміна, яку я пропоную замовити, - це поставити Стратегію на перше місце. Більшість сучасних розробників пережили деякі добрі чи погані втілення Фабрики, тому, починаючи з Фабрики, це може призвести до безлічі розмов і плутанини щодо цього шаблону. перша зустріч.


3

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


2

Моя пропозиція - це поєднання реалізації декількох із них та аналізу деяких реалізацій їх. Наприклад, у .Net є використання моделей адаптерів, якщо ви подивитесь на адаптери даних, а також деякі інші, якщо трохи зануритися в рамки.


2

Я не знаю про найкращу книгу, але пуристи можуть сказати Шаблони дизайну: Елементи багаторазового об’єктно-орієнтованого програмного забезпечення

Що стосується мого особистого улюбленого, мені подобаються шаблони дизайну Head First Design, опубліковані O'Reilly. Це написано розмовним голосом, який мені подобається. Коли я читав його, я одночасно переглядав свій вихідний код, щоб побачити, чи стосується він того, що я читав. Якщо це сталося, я відремонтувався. Ось як я дізнався ланцюжок відповідальності.

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


2

Шаблони дизайну - це лише інструменти - подібні до функцій бібліотеки. Якщо ви знаєте, що вони там є і їх приблизна функція, ви можете піти викопати їх із книги, коли це буде потрібно.

У моделях дизайну немає нічого магічного, і будь-який хороший програміст вигадав 90% з них до того, як вийшли книги. Здебільшого я вважаю, що книги є найбільш корисними при простому визначенні назв для різних моделей, щоб ми могли їх легше обговорити.


2

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

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


2

Ідея, що читає шаблони дизайну, практичне їх кодування насправді не допоможе ІМО. Коли ви читаєте ці книги 1. Шукайте основну проблему, яку вирішує конкретний шаблон дизайну, починаючи з креативних шаблонів - найкраща ставка. 2. Я впевнений, що ви писали код раніше, проаналізуйте, чи стикалися ви з тими ж проблемами, які дизайнерські зразки мають на меті запропонувати рішення. 3. Спробуйте перевлаштувати / перевчити факторний код або, можливо, почати свіжим.

Про ресурси ви можете їх перевірити

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

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

Мої 2 копійки ...


1

Я думаю, що також важко вивчити шаблони дизайну. Ви повинні знати більше про OOP та деякий досвід розвитку середніх та великих додатків. Для мене я навчаюсь як група розробників, щоб зробити дискусію. Ми слідуємо Посібнику з навчання шаблонів дизайну, щоб вони закінчили вивчення моделей. Є спільники C # та JavaScript об'єднуються разом. Мені здається, що розробник C # пише коди в JavaScript, а розробник JavaScript робить те ж саме для C # кодів. Після того, як я покидаю зустріч, я також досліджую і читаю вдома кілька книг для перегляду. Кращий спосіб зрозуміти більше і пам’ятати про це - вести блоги із прикладами як на C #, так і на JavaScript тут http://tech.wowkhmer.com/category/Design-Patterns.aspx .

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

наприклад:

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

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

Програмування: Клієнт просто передає заводському методу значення $ 5, 10 або 20 доларів, і він поверне об'єкт Pizza назад. Таким чином, клієнт може використовувати цей об’єкт, не знаючи, як він обробляє.

Я не впевнений, що це може вам допомогти. Це залежить від рівня знань людей, які приєднуються до зустрічі.


Друга посилання у відповідь мертва.
Панг

1

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

З цього списку ви можете вивести сценарії, які планує вирішити Шаблони дизайну. Чи був час, коли вам потрібно було виконувати однакові серії дій на різних наборах даних? Чи потрібно вам мати можливість майбутньої програми, але хочете уникати переробки всієї вашої логіки для існуючих класів? Почніть з цих сценаріїв і поверніться до каталогу шаблонів та відповідних проблем, які вони мають вирішити. Ви, ймовірно, побачите деякі збіги між Міністерством фінансів та вашою бібліотекою проектів.


1

Для початківців, шаблони дизайну Head First Design зробили б, коли ми ознайомимось з усіма моделями, то спробуємо візуалізувати об'єкти реального часу в ці шаблони.

Книга допоможе вам зрозуміти основні поняття, якщо тільки ви не реалізуєтесь у реальному світі, Ви НЕ МОЖЕТЕ бути МАЙСТЕРМ ДИЗАЙНОВИХ ПАРТНЕРІВ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.