Как увидеть и применить паттерны проектирования?

Anthony Ferrara aka ircmaxell опубликовал пост Beyond Design Patterns, прочтя который я не cмог промолчать. Он настолько попал для меня в десятку, что моим эмоциям и восторгу нет предела.

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

Многие программисты знают кучу паттернов, перечитывают банду четерех, но при этом никогда не понимают как это применить, когда и в какой ситуации. Я и сам эту книжку перечитываю/перелистываю ежегодно для освежения материала. Хочу отметить, что каждый раз нахожу что-то новенькое для себя. В этом году пришел к выводу, что нельзя в банде четерех читать реализацию паттерна, особенно человеку, который первый раз берет книжку. Абсолютно неважно, как это реализовывать. Главное понимать, знать и ощущать: что? где? когда? зачем? и почему? Своим "протеже" я даже запретил читать реализацию. Если вы точно скажете: "ага, запахло паттерном Хранитель", вы всегда откроете книжку или гугл, и посмотрите реализацию. Но уделяя большое внимание при чтении реализации, разбираясь в каждой запятой, вы забываете самое главное: что? где? когда? зачем? и почему? Поверьте, придет время, когда вам нужно будет применить паттерн, тогда вы откроете этот каталог и сделаете как вам лучше.

Простой пример, сегодня утром меня попросили совета по проблеме. У ребят возникла какая-то задача, они совместно ее решали, нарисовали uml диаграмму, чтобы затем обсудить. Первые слова, которые прозвучали: "У нас есть объект, нам нужно иметь возможность сохранить его состояние и при возможности откатиться до него". Фраза уже сама по себе отвечает на вопросы "что нам нужно и зачем".

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

[Банда четырех. Паттерн Memento. Назначение. 2012 г.]

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

Поэтому, если вам нужны еще советы как перейти от теории к практике, гоу: Beyond Design Patterns.

Комментарии