Сообщений 9    Оценка 0        Оценить  
Система Orphus

Рефакторинг с использованием шаблонов

(паттернов проектирования)

Автор: Джошуа Кериевски
Издательство: Вильямс, 2006
400 страниц

Материал предоставил: Денис Миллер
Найти в магазинах
Купить в Озоне (847 руб.)
Купить в Books.Ru
Купить в Болеро (650 руб.)
Купить в OZ.by (Беларусь)
Купить в My-Shop.ru (717 руб.)

Аннотация

Содержание
О чем эта книга
Стоя на плечах гигантов
Отзывы о книге
Предисловие Ральфа Джонса
Предисловие от Мартина Фаулера
Кому следует читать эту книгу
Web-ресурсы
Комментарии

Аннотация

Книга "Рефакторинг с использованием шаблонов" представляет результаты многолетнего опыта профессионального программиста по применению шаблонов проектирования (паттернов). Авторский подход к проектированию состоит в том, что следует избегать как недостаточного, так и избыточного проектирования, постоянно анализируя готовый работоспособный код и реорганизуя его только в том случае, когда это приведет к повышению его эффективности, упрощению его понимания и сопровождения. Шаблоны проектирования - не панацея, так что бывают как ситуации, когда такая реорганизация должна выполняться с использованием шаблонов проектирования, так и ситуации, когда наилучшее решение состоит в отказе от них. Автор на основании как собственного, так и чужого опыта детально рассматривает различные признаки кода, требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач. Книга "Рефакторинг с использованием шаблонов" может рассматриваться и как учебник по рефакторингу для программиста среднего уровня, и как справочное пособие для профессионала, которое может подсказать, какое именно решение стоит принять в той или иной сложной ситуации.

Содержание

Содержание
Предисловие Ральфа Джонсона
Предисловие Мартина Фаулера

Введение

О чем эта книга
Каковы цели этой книги
Кому следует читать эту книгу
Какие знания вам необходимы
Как пользоваться этой книгой
История книги
Стоя на плечах гигантов
Благодарности

Глава 1. Почему я написал эту книгу

Избыточное проектирование
Панацея шаблонов проектирования
Недостаточное проектирование
Управляемая тестами разработка и постоянная реорганизация кода
Рефакторинг и шаблоны
Эволюционирующее проектирование

Глава 2. Рефакторинг

Что такое рефакторинг
Что побуждает нас реорганизовывать код
Множество точек зрения
Удобочитаемый код
Поддержание чистоты
Малые шаги
Долги проектирования
Развивая новую архитектуру
Составные и управляемые тестами реорганизации кода
Преимущества составных рефакторингов
Средства реорганизации кода

Глава 3. Шаблоны

Что такое шаблон
Удовольствие от шаблонов
Много способов реализации шаблона
Рефакторинг к шаблонам, по направлению к шаблонам и с отказом от шаблонов
Делают ли шаблоны код более сложным
Знание шаблонов
Использование шаблонов на ранних этапах проектирования

Глава 4. Признаки плохого кода

Duplicated Code
LongMethod
Conditional Complexity
Primitive Obsession
Indecent Exposure
Solution Sprawl
Alternative Classes with Different Interfaces
Lazy Class
Large Class
Switch Statements
Combinatorial Explosion
Oddball Solution

Глава 5. Каталог рефакторингов к шаблонам

Формат рефакторингов
Проекты, упоминаемые в этом каталоге
Генераторы XML
Синтаксический анализатор HTML
Калькулятор рисков при ссудах
Отправная точка
Последовательность изучения

Глава 6. Создание объектов

Replace Constructors with Creation Methods
Move Creation Knowledge to Factory
Encapsulate Classes with Factory
Разновидности
Introduce Polymorphic Creation with Factory Method
Encapsulate Composite with Builder
Inline Singleton

Глава 7. Упрощение

ComposeMethod
Replace Conditional Logic with Strategy
Move Embellishment to Decorator
Replace State-Altering Conditionals with State
Replace Implicit Tree with Composite
Replace Conditional Dispatcher with Command

Глава 8. Обобщение

Form Template Method
ExtractComposite
Replace One/Many Distinctions with Composite
Replace Hard-Coded Notifications with Observer
Unify Interfaces withAdapter
Extract Adapter
Replace Implicit Language with Interpreter

Глава 9. Защита кода

Replace Type Code with Class
Limit Instantiation with Singleton
Introduce Null Object

Глава 10. Накопление информации

Move Accumulation to Collecting Parameter
Move Accumulation to Visitor

Глава 11. Утилиты

Chain Constructors
Unify Interfaces
Extract Parameter

Послесловие
Список литературы
Предметный указатель

О чем эта книга

Эта книга о тесном соединении реорганизации кода, или рефакторинга, т.е. процесса улучшения проекта, с шаблонами проектирования - классическими решениями повторяющихся проблем проектирования. Рефакторинг с использованием шаблонов предполагает, что шаблоны лучше применять для улучшения уже существующего проекта, а не сразу при его создании. Это справедливо как для кода, существующего долгие годы, так и для кода, существующего минуты. Мы улучшаем проект с помощью шаблонов, применяя последовательность низкоуровневых преобразований проекта, называемую реорганизацией кода.

Стоя на плечах гигантов

Летом 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], и демонстрируя, что нет никакой нужды в том, чтобы встраивать их в систему заранее - они могут быть использованы по мере роста системы.

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

Я рад возможности представить вам эту книгу. Я долго уговаривал Джошуа ее написать, а затем работал над ней вместе с ним. Я восхищен результатом, и, думаю, вы также будете от него в восторге.

Кому следует читать эту книгу

Книга предназначена для объектно-ориентированных программистов, занятых или интересующихся улучшением существующего проекта. Одни из них используют шаблоны и/или выполняют рефакторинг, но никогда не реализуют шаблоны в процессе реорганизации; другие мало знакомы с реорганизацией кода и шаблонами и хотели бы узнать об этом больше.

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

Web-ресурсы

http://industriallogic.com/xp/refactoring/ - Страница автора книги Джошуа Кериевски, посвященная книге.

http://martinfowler.com/books.html#series - Серия книг, рекомендованная Мартинов Фаулером.

http://www.williamspublishing.com/Books/5-8459-1087-0.html - Издательство Вильямс. Информация о книге, примеры страниц, рекомендации для дальнейшего чтения.

Комментарии

Денис Миллер, Инструктор Luxoft

Удивительно, как бесконечно можно изучать тему качественного кодирования. Смотрим в одну сторону - паттерны, в другую - рефакторинг. Прочитав книгу, два разных явления интегрируются в единое целое. Рекомендую, настоятельно требую, прошу обратить внимание.... не находится слов, чтобы заставить вас прочитать эту книгу. А заставлять и не нужно, откройте и увидите: простой язык, множество примеров и примерчиков, описание реальных ситуаций с проблемным кодом, а самое приятное как автор разделывается с проблемным кодом.

В книге добавлено несколько smell'ов. Код примеров написан на Java, но сложностей при чтении не возникает (я разработчик .Net). Они появятся во время пошаговой проверки каждого из рефакторингов. Рефакторинг не терпит скорости и невнимательности. Стоит пропустить шаг, сразу получаю ошибки компиляции и теряется цепь рассуждений. Но усилия стоят того - результат каждого законченного преобразования выглядит впечатляюще!

Закрыв книгу, начинаешь по-новому понимать ряд паттернов. Возникает желание с новым взглядом приняться за чтение GoF.

Вывод: приятного чтения!

    Сообщений 9    Оценка 0        Оценить