Книга: Экстремальное программирование. Разработка через тестирование
30. Шаблоны проектирования
30. Шаблоны проектирования
В чем заключается основная идея шаблонов? Нам кажется, что мы постоянно сталкиваемся с разнообразными, неповторяющимися проблемами, однако на деле оказывается, что большая часть проблем, которые нам приходится решать, обусловлена используемыми нами инструментами, но не основной задачей, которая перед нами стоит[24]. Если исходить из этого предположения, то можно найти (и мы действительно находим) общие проблемы со стандартными решениями, несмотря на все разнообразие контекстов, в рамках которых нам приходится работать.
Использование объектов для организации вычислений – это один из лучших примеров стандартного решения, направленного на устранение множества общих проблем, с которыми программистам приходится сталкиваться при разработке самого разнообразного программного обеспечения. Колоссальный успех шаблонов проектирования (design patterns) является доказательством общности проблем, с которыми сталкиваются программисты, использующие объектно-ориентированные языки программирования[25]. Книга Design Patterns («Паттерны проектирования») имела большой успех, однако ее популярность стала причиной сужения взгляда на шаблоны проектирования. Что я имею в виду? Книга рассматривает дизайн как фазу разработки программы, однако авторы совершенно не учитывают, что рефакторинг – это мощный инструмент формирования дизайна. Дизайн в рамках TDD требует несколько иного взгляда на шаблоны проектирования.
В данной главе я расскажу о нескольких полезных шаблонах проектирования. Безусловно, мое изложение не претендует на полноту. Представленная здесь информация может оказаться полезной при изучении рассматриваемых в книге примеров. Вот краткое перечисление рассмотренных здесь шаблонов:
• «Команда» (Command) – обращение к некоторому коду представляется в виде объекта, а не в виде простого сообщения;
• «Объект-значение» (Value Object) – после создания объекта его значение никогда не меняется, благодаря этому удается избежать проблем, связанных с наложением имен (aliasing);
• «Нуль-объект» (Null Object) – соответствует базовому случаю вычислений объекта;
• «Шаблонный метод» (Template Method) – представляет собой инвариантную последовательность операций, определяемую при помощи абстрактных методов, которые можно переопределить с помощью наследования;
• «Встраиваемый объект» (Pluggable Object) – представляет собой вариацию в виде объекта с двумя реализациями или большим их количеством;
• «Встраиваемый переключатель» (Pluggable Selector) – позволяет избежать создания многочисленных подклассов путем динамического обращения к различным методам для различных экземпляров класса;
• «Фабричный метод» (Factory Method) – вместо конструктора для создания объекта используется специальный метод;
• «Самозванец» (Imposter) – представляет собой вариацию путем создания новой реализации существующего протокола;
• «Компоновщик» (Composite) – композиция объектов ведет себя так же, как один объект;
• «Накапливающий параметр» (Collecting Parameter) – результаты вычислений, выполняемых в разных объектах, накапливаются в специальном объекте, который передается объектам, выполняющим вычисления, в качестве параметра.
В табл. 30.1 описывается, на каких этапах TDD используется тот или иной шаблон проектирования.
Таблица 30.1. Использование шаблонов проектирования при разработке через тестирование (TDD)
- Команда (Command)
- Объект-значение (Value Object)
- Нуль-объект (Null Object)
- Шаблонный метод (Template Method)
- Встраиваемый объект (Pluggable Object)
- Встраиваемый переключатель (Pluggable Selector)[26]
- Фабричный метод (Factory Method)
- Самозванец (Imposter)
- Компоновщик (Composite)
- Накапливающий параметр (Collecting Parameter)
- Одиночка (Singleton)
- Ошибки проектирования базы данных
- 7.4. Модель системы автоматизированного проектирования защиты информации
- Этапы проектирования базы данных
- 2.5.1. Основные положения метода структурного проектирования
- 28. Шаблоны зеленой полосы
- Глава 1 МЕТОДОЛОГИЧЕСКИЕ ОСНОВЫ ПРОЕКТИРОВАНИЯ ПРОГРАММ
- Официальное закрытие этапа Концептуального проектирования
- Глава 1. Выбор вида, свойств и целей турпродукта для проектирования
- Приложение 3 ФОНД ЭВРИСТИЧЕСКИХ ПРИЕМОВ ПРОЕКТИРОВАНИЯ ПРОГРАММ
- 5.4. Завершающие этапы проектирования бизнес-тренинга
- Соотношение спецификации и проектирования
- 1.1. ОБЩИЕ ПОЛОЖЕНИЯ ТЕОРИИ ПРОЕКТИРОВАНИЯ