Сообщений 9 Оценка 0 Оценить |
Книга "Рефакторинг с использованием шаблонов" представляет результаты многолетнего опыта профессионального программиста по применению шаблонов проектирования (паттернов). Авторский подход к проектированию состоит в том, что следует избегать как недостаточного, так и избыточного проектирования, постоянно анализируя готовый работоспособный код и реорганизуя его только в том случае, когда это приведет к повышению его эффективности, упрощению его понимания и сопровождения. Шаблоны проектирования - не панацея, так что бывают как ситуации, когда такая реорганизация должна выполняться с использованием шаблонов проектирования, так и ситуации, когда наилучшее решение состоит в отказе от них. Автор на основании как собственного, так и чужого опыта детально рассматривает различные признаки кода, требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач. Книга "Рефакторинг с использованием шаблонов" может рассматриваться и как учебник по рефакторингу для программиста среднего уровня, и как справочное пособие для профессионала, которое может подсказать, какое именно решение стоит принять в той или иной сложной ситуации.
Эта книга о тесном соединении реорганизации кода, или рефакторинга, т.е. процесса улучшения проекта, с шаблонами проектирования - классическими решениями повторяющихся проблем проектирования. Рефакторинг с использованием шаблонов предполагает, что шаблоны лучше применять для улучшения уже существующего проекта, а не сразу при его создании. Это справедливо как для кода, существующего долгие годы, так и для кода, существующего минуты. Мы улучшаем проект с помощью шаблонов, применяя последовательность низкоуровневых преобразований проекта, называемую реорганизацией кода.
Летом 1995 года, рассматривая в книжном магазине литературные новинки, я впервые наткнулся на книгу Design Patterns и влюбился в шаблоны. Я хочу поблагодарить ее авторов - Эриха Гамму (Erich Gamma), Ричарда Хелма (Richard Helm), с которым я до сих пор не встретился, Ральфа Джонсона (Ralph Johnson) и Джона Влиссайдза (John Vlissides) - за написание этого прекрасного произведения. Знания, которыми вы поделились в своей книге, помогли мне, как разработчику программного обеспечения, существенно повысить свой профессиональный уровень.
С Мартином Фаулером (Martin Fowler) я встретился на конференции по шаблонам приблизительно в 1996 году, еще до того, как он стал известен. Это стало началом долгой дружбы. Я так бы и сомневался, должен ли я писать эту книгу, если бы Мартин (и его коллеги Кент Бек (Kent Beck), Уильям Опдайк (William Opdyke), Джон Брант (John Brant) и Дон Робертс (Don Roberts)) не написали классическую книгу Refactoring, кардинально изменившую мой подход к проектированию программного обеспечения.
То, что я написал эту книгу, стало возможным только благодаря тяжелому труду авторов Design Patterns и Refactoring. Я бесконечно благодарен им за их великие книги.
"Чтобы рефакторинг был полезным, он должен применяться не только в абстрактных интеллектуальных упражнениях. Шаблоны документируют программные структуры, обладающие известными полезными свойствами. Объединим эти две составляющие - и мы получим Рефакторинг с использованием шаблонов. Если вы намерены реорганизовать какой-то код в реальной жизни, советую прочитать и применить Рефакторинг с использованием шаблонов".
"В своей книге мы утверждали, что целью преобразований кода являются шаблоны проектирования. Книга Джошуа окончательно доказывает нашу правоту. Продолжая этот подход, она углубляет понимание как реорганизации кода, так и шаблонов проектирования".
"Наконец-то описана связь между шаблонами программного обеспечения и быстрой разработкой".
"Рефакторинг с использованием шаблонов - революционный подход к применению шаблонов, комбинирующий нисходящую практичность шаблонов проектирования с восходящим развертыванием итерационной разработки и постоянной реорганизацией кода. Каждый серьезный разработчик программного обеспечения должен использовать этот подход, чтобы обнаружить новые возможности применения шаблонов для улучшения кода".
"Этим уникальным каталогом рефакторингов на уровне проектирования Джошуа Кериевски вывел реорганизации кода в совершенно новое измерение. Рефакторинг с использованием шаблонов демонстрирует разработчикам создание проектных улучшений, упрощающих повседневную работу. Книга является бесценным справочником для профессионалов в области реорганизации кода".
"Рефакторинг с использованием шаблонов делает динамичным и гибким предмет, который ранее представлялся статичным и негибким, превращая его в реальный процесс с экспериментами, ошибками и исправлениями; благодаря этому вы понимаете, что хорошие проекты не возникают в результате поворота нескольких рычагов, а развиваются в борьбе и рефлексии. Кериевски изменил и структуру изложения, чтобы сделать его более ясным и легким для усвоения. Несомненно, он решил множество структурных проблем, с которыми я боролся, работая над книгой Thinking in Patterns. В настоящем издании хорошо сочетаются тестирование, рефакторинг и шаблоны; книга легко читается, наполнена здравым смыслом и глубоким пониманием предмета".
"Впервые увидев Джошуа, я был поражен тем, с каким глубоким пониманием и страстным увлечением он применяет шаблоны проектирования и обучает этому других. Великие учителя серьезно заботятся о своем предмете и о том, как поделиться им. Думаю, Джошуа - великий учитель и великий разработчик. Все мы можем получить пользу от его понимания предмета".
"Важность книги Рефакторинг с использованием шаблонов заключена не только в том, что она предоставляет пошаговые инструкции улучшения кода путем методического введения подходящих шаблонов, но в гораздо большей степени в том, что она обучает принципам, лежащим в основе внедренных шаблонов проектирования. Книга будет полезна как новичкам, так и опытным проектировщикам. Это великая книга".
"Овладение ремеслом - это не просто освоение подходящего инструментария, но и эффективное его использование. Рефакторинг с использованием шаблонов объясняет, как мастерски обращаться с мощными средствами проектирования".
"Джошуа использует шаблоны, чтобы определить направление рефакторинга, и применяет рефакторинг для внедрения в код шаблонов. Вы научитесь поэтапно улучшать существующий код, вместо того чтобы пытаться натянуть на него стандартные решения".
В книге Design Patterns описано несколько способов использования шаблонов. Одни долго обдумывают использование шаблонов, прежде чем написать какой-нибудь код, в то время как другие добавляют шаблон лишь тогда, когда уже написано достаточно много кода. Второй способ использования шаблонов и есть реорганизация кода, или рефакторинг, поскольку при этом происходит изменение проекта системы без добавления в него новых функций или изменения внешнего поведения. Одни включают в программу шаблон, думая, что он позволит более легко ее изменять, другие делают это, чтобы упростить текущий проект. Если код уже написан, то все это является его рефакторингом: первые реорганизуют код для облегчения изменений, в то время как вторые наводят порядок после изменений.
Хотя шаблон - это нечто, присутствующее в самой программе, преобразование программы - также шаблон. Каждый шаблон можно объяснить путем демонстрации программы до его использования и после. С другой стороны, под шаблонами можно понимать реорганизацию кода.
К сожалению, многие читатели теряют связь между шаблонами проектирования и реорганизацией кода. Они понимают шаблоны как нечто, всецело относящееся к проекту, а не к коду. Полагаю, что в заблуждение их вводит название - шаблон проектирования; однако в книге преимущественно используется код, написанный на языке Java, и это обстоятельство должно указывать на то, что шаблоны имеют отношение как к коду, так и к его проектированию и что добавление шаблона обычно требует изменений кода.
Джошуа Кериевски правильно уловил связь. Я встретил его вскоре после того, как он основал группу изучения шаблонов проектирования в Нью-Йорке (Design Patterns Study Group of New York City). Он излагал идею изучения шаблона "до и после" на примере, демонстрирующем влияние шаблона на систему. Столь страстный энтузиазм привел к тому, что до его отъезда из города группа, превышающая 60 человек, собиралась несколько раз в месяц. Он начал с преподавания курсов о шаблонах для компаний и обучал их на месте, у себя дома и по Интернету. Он даже учил других людей обучать этому.
Джошуа продолжил свой путь, став как практиком экстремального программирования (XP), так и преподавателем. Этому в полной мере соответствует тот факт, что он взялся за написание книги, демонстрирующей связь между шаблонами проектирования и рефакторингом - одним из основных видов деятельности в экстремальном программировании. Рефакторинг не ортогонален шаблонам - он близок к ним. Не все шаблоны, о которых он говорит, взяты из книги Design Patterns, но все они в ее стиле. Книга Джошуа демонстрирует, как шаблоны могут помочь вам в проектировании.
Применяя то, чему учит эта книга, вы расширите свои способности по созданию хороших проектов и научитесь размышлять о них.
Ральф Джонсон (Ralph Johnson)
Вот уже несколько лет я вовлечен в защиту быстрых методов вообще и в экстремальном программировании в частности. Когда я делаю это, мне часто задают вопрос, как это соответствует моему долговременному интересу к шаблонам проектирования. Да, я слышал утверждения, что, поддерживая рефакторинг и эволюционирующее проектирование, я отрекаюсь от того, что написал ранее об анализе и шаблонах проектирования.
Стоит всего лишь бегло взглянуть на программистов, чтобы осознать некорректность такого взгляда. Посмотрите на ведущих членов сообщества, использующего шаблоны, и на ведущих членов сообщества, использующего быструю разработку и экстремальное программирование, и вы увидите огромное перекрытие этих множеств. Правда состоит в том, что шаблоны и эволюционирующее проектирование связаны с самого начала своего существования.
Джошуа Кериевски находится в сердце этого наложения. Впервые я встретил его, когда в Нью-Йорке он организовал имевшие большой успех группы по изучению шаблонов. Эти группы совместно изучали разрастающуюся литературу по шаблонам проектирования. Я быстро выяснил, что у Джошуа непревзойденное понимание шаблонов проектирования, и, слушая его, стал лучше разбираться в предмете. Джошуа раньше усвоил реорганизацию кода и был чрезвычайно полезным рецензентом моей книги. Его работа по шаблонам и экстремальному программированию на первой XP-конференции - одна из наиболее любимых мною.
Итак, если кто и подходит для того, чтобы написать о взаимодействии шаблонов и рефакторинга, так это Джошуа. Эту область я немного исследовал в книге Refactoring, но не заходил слишком далеко, поскольку хотел сконцентрироваться на основах рефакторинга. Книга Джошуа значительно расширяет область, обсуждая в мельчайших деталях, как применять большинство наиболее популярных шаблонов, использованных в книге Design Patterns [12], и демонстрируя, что нет никакой нужды в том, чтобы встраивать их в систему заранее - они могут быть использованы по мере роста системы.
В этой книге также больше материала, посвященного шаблонам и рефакторингу в целом. Тем не менее, изучая ее, можно приобрести и конкретные знания о представленных вариантах реорганизациях кода. Многие, ознакомившись с последовательными фазами взаимодействия задачи и решения, признают подход с использованием реорганизации кода наилучшим способом изучения шаблонов. Этому способствует и тот факт, что рефакторинг, по сути, есть проведение больших изменений малыми шагами.
Я рад возможности представить вам эту книгу. Я долго уговаривал Джошуа ее написать, а затем работал над ней вместе с ним. Я восхищен результатом, и, думаю, вы также будете от него в восторге.
Книга предназначена для объектно-ориентированных программистов, занятых или интересующихся улучшением существующего проекта. Одни из них используют шаблоны и/или выполняют рефакторинг, но никогда не реализуют шаблоны в процессе реорганизации; другие мало знакомы с реорганизацией кода и шаблонами и хотели бы узнать об этом больше.
Книга полезна как при разработке "с чистого листа", когда вы пишете новую систему или функцию с нуля, так и при сопровождении, когда вы в основном поддерживаете унаследованную систему.
http://industriallogic.com/xp/refactoring/ - Страница автора книги Джошуа Кериевски, посвященная книге.
http://martinfowler.com/books.html#series - Серия книг, рекомендованная Мартинов Фаулером.
http://www.williamspublishing.com/Books/5-8459-1087-0.html - Издательство Вильямс. Информация о книге, примеры страниц, рекомендации для дальнейшего чтения.
Удивительно, как бесконечно можно изучать тему качественного кодирования. Смотрим в одну сторону - паттерны, в другую - рефакторинг. Прочитав книгу, два разных явления интегрируются в единое целое. Рекомендую, настоятельно требую, прошу обратить внимание.... не находится слов, чтобы заставить вас прочитать эту книгу. А заставлять и не нужно, откройте и увидите: простой язык, множество примеров и примерчиков, описание реальных ситуаций с проблемным кодом, а самое приятное как автор разделывается с проблемным кодом.
В книге добавлено несколько smell'ов. Код примеров написан на Java, но сложностей при чтении не возникает (я разработчик .Net). Они появятся во время пошаговой проверки каждого из рефакторингов. Рефакторинг не терпит скорости и невнимательности. Стоит пропустить шаг, сразу получаю ошибки компиляции и теряется цепь рассуждений. Но усилия стоят того - результат каждого законченного преобразования выглядит впечатляюще!
Закрыв книгу, начинаешь по-новому понимать ряд паттернов. Возникает желание с новым взглядом приняться за чтение GoF.
Вывод: приятного чтения!
Сообщений 9 Оценка 0 Оценить |