agnamanshamansky
@agnamanshamansky
Python Developer

Как вы освоили шаблоны проектирования?

Понятно что чтобы научиться программировать нужно постоянно писать код. Вопрос с чего начать в случае с паттернами?
Какую маленькую задачу можно поставить, чтобы решить её с помощью паттернов?
  • Вопрос задан
  • 18151 просмотр
Решения вопроса 2
27cm
@27cm
TODO: Написать статус
Вот вам 12 маленьких задач на 12 паттернов:
github.com/zfcampus/zendcon-design-patterns

1. Открываете папку с паттерном.
2. Читаете README.md с описание задачи.
3. Открываете exercise.php и пытаетесь решить задачу, применив соответствующий паттерн.
4. При необходимости вспоминаете теорию: github.com/domnikl/DesignPatternsPHP
5. Сверяетесь с решением в solution.php.
Ответ написан
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Когда начался бум и восторг вокруг концепции паттернов проектирования, выкрики "GoF рулит!" и так далее, я озадачился тем, чтобы понять, что за шум?

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

По аналогии в проектировании софта имееются свои архитектурные вопросы вроде разбиения приложения на компоненты/модули, организации зависимостей между ними, распределение функциональных обязанностей и т.п. Как ловко подметили авторы книжки из этой банды четырех (The "Gang of Four") в нашей индустрии можно также выделить некоторе количество типовых шаблонов, проверенных на практике, чтобы тем самым не наступать на уже обойденные другими грабли.

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

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

К изучению паттернов я дам такие советы:

1) Прочтите пару книжек, чтобы понять, что это за зверь и с чем его едят. Можно взять одну из вариаций книжки GoF или какие-то производные для вашего стека разработки - познакомиться с основными популярными шаблонами. Сразу после этого я посоветовал бы прочесть книжку "Горький вкус Java" (Брюс Тейт) - она про анти-паттерны. Это чтобы понять обратную сторону их использования. Мне понравилась и уберегла думаю от многих проблем. То что на примере Java - неважно. Речь идет о шаблонах, так что представителям других стеков (к которым отношусь и я) будет просто понять все равно.

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

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

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

Я даже пожалуй посоветовал бы подойти к освоению айтишной архитектурной мудрости с другой стороны - со стороны нефункциональных требований или так называемых "-ilities" - их много. Тут вот описаны 7 штук. А вообще их десятки.

Среди прочих - такие как maintainability (простая поддержка кода), scalability (масштабируемость), extensibility (расширяемость), availability (устойчивость ) и тп. Если, проектируя свое приложение, вы задумываетесь об этих "илитях" и стараетесь их обеспечить в необходимом проекту объеме, то, как правило, ваше приложение будет иметь отличную архитектуру. При этом шаблоны проектирования в ней появятся лаконично сами собой.

Поскольку идея использовать шаблоны - это попытка опытных программных инженеров дать десяток готовых рецептов менее опытным, чтобы пока они не научились варить "вкусную кашу", они не варили уж что-то совсем несъедобное. :) Учитесь "готовить", разбирайтесь в -ilites :) и все будет хорошо
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
goodprogrammer
@goodprogrammer
к. ф.-м. н.
Опасная дорожка — заставлять себя применять паттерны. Паттерны не волшебная таблетка.

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

А то такого набыдлокодите, что мама не горюй :(
Ответ написан
@lomikman
Лучше начинать на практике с простых шаблонов (singleton, fabric). Попробуйте для начала научиться просто "видеть" их в используемых библиотеках. Дальше можно смотреть реализации и пробовать применять в собственном коде.
Самый быстрый способ прокачаться это закодить что-нибудь, потом попросить знакомого/эксперта/дядечку с опытом за деньги/пиво дать комментарии по коду и выстроить архитектуру(повторить n раз). Тогда вам станет понятно зачем они нужны и области их применимости.
Главное не заболеть "шаблоном проектирования головного мозга" - это когда кодер сует шаблоны куда не нужно, "лишь бы были", следуя модным течениям.
Ответ написан
SynCap
@SynCap
Делаю интернет с 1998 года
блин, вот - волшебная таблетка

10 минут - и можно выгибать пальцы в крутых курилках и на собеседованиях
Ответ написан
PavelK
@PavelK
На моём веку "тютелька в тютельку" не вписался не один из шаблонов.
Просто понять что они из себя представляют, но не стремиться им следовать досконально, иначе такой говнокод будет, что жуть. Хотя, может я их и не освоил за свои пять лет........
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы