FAQ: Design Patterns

 
 
 
Сообщения:9807
1. Предисловие (важно)
2. Одиночка (Singleton Design Pattern)
3. Команда (Command/Action Design Pattern)

Рекомендуемая литература:
Изменен:18 дек 2012 09:25
 
 
Сообщения:9807
Предисловие

Здесь постараемся проследить три вопроса:
1. Что такое шаблоны проектирования?
2. Что нам дают шаблоны проектирования?
3. Что, если мы не знаем шаблонов проектирования?
4. Какие ошибки допускают новички в шаблонах?

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

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

Таким образом, шаблоны проектирования стали настолько важными, что становятся базовым, можно даже сказать общим образованием для когорты разработчиков, незнание их - ваша неграмотность.
Однако же просто взять с места и изучить диаграммы шаблонов - мало, новички допускают достаточно серьезные ошибки на этапе пост-обучения. Самые распространенные:
  • Я все понял! Если вы считаете, что прочитав одну книжку вы поняли шаблон, - вы ошибаетесь, каждый из них требует глубокого исследования с вашей стороны, должна быть прочитана стопка бумаг и сделано несколько примеров в разных проектах, прежде чем вы можете смело бахвалиться вашей эрудицией. Излишняя уверенность может привести к проблемам, иже перечислены ниже.
  • Где бы применить этот шаблон? Во время разработки приложения вы не должны задаваться вопросом о том, где бы применить шаблон, вы должны узнавать ситуации, в которых можно применять их, поэтому обращайте внимание на мотивации шаблонов и примеры, где они были применены в той же литературе. Не шаблон должен искать ситуацию, а ситуация - шаблон.
  • На крыльях любви. Часто, прочитав книгу о шаблонах, молодые разработчики пытаются их применять везде - где надо и где не надо. Это связано с предыдущим пунктом - руки чешуться применить только что полученные знания. Такие действия влекут за собой неприятные последствия - код вопреки всем ожиданием станет нечитабельным, негибким, неизменяемым. В конечном счете вы можете добиться того, чего стараетесь избежать используя шаблоны.
  • Влазит? Впихнем! Бывают ситуации, когда у вас уже написан код, который обладает некоторыми недостатками и его можно порефакторить к какому-либо шаблону. Однако, прежде чем начать вы обязательно должны подумать а сделает ли такое изменение код проще и гибче? Бывает, что впихнув шаблон, куда он вроде и вправду годен, архитектура становится сложней, поэтому думайте будет ли на самом деле профит от рефакторинга к шаблону.

В общем вы поняли, что шаблоны - эт полезная все-таки штука, без которой не обойтись в реальной жизни на серьезных проектах, однако нужно быть осторожным и не позволять эмоциям схавать ваш моск, как и всякий инструмент, каждый шаблон годен только для того, для чего он предназначен.
PS: Для большего понимания и лучшего усвоения шаблонов советую для начала ознакомиться с OOD Principles (принципы объектно ориентированного проектирования). Отличная книга из этой серии - Head First OO Analysis and Design.
Изменен:31 июл 2010 09:36
 
 
Сообщения:9807
Шаблон проектирования Одиночка (Singleton Design Pattern)
Статья переехала на JavaTalks Articles.
Изменен:18 дек 2012 09:23
 
 
Сообщения:9807
Шаблон проектирования Команда (Command/Action Design Pattern)
Статья переехала на JavaTalks Articles
Изменен:18 дек 2012 09:24
 
 
Сообщения:33
Случайно набрёл на тему. Интересно расписано... Я не спец. в этих делах и могу ошибаться, т.е. пока учусь, но мне кажется паттерн "команда" приведён не очень удачно. Фактически на примере "команды" объяснены принципы полиморфизма или как ещё называют "позднего связывания". Тогда причём здесь "команда"? "команда", как мне кажется, выделена в отдельный паттерн по причине сложности конкретной реализации, например, во избежании гистерезиса. А как паттерн он не представляет какой-либо значимости и не даёт ничего нового. Совсем другое дело, например, посетитель, да, он действительно ценен как паттерн.
 
 
Сообщения:944
Quote:
гистерезис

умное слово, звучит круто =)))

З.Ы. есть мнение что необходимость в визиторе возникает там где имеющийся код написан коряво

https://db.tt/V3pEz6WlVJ - облачное хранилище данных
 
 
Сообщения:441
планируется ли запиливание статей про другие шаблоны ? а то только две вижу
 
 
Сообщения:9807
Неа, не планируется. Планировалось, планировалось, да не выпланировалось :)
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет