- •А.А. Волосевич
- •3. Шаблоны и архитектура программ
- •3.1. Модульное тестирование
- •3.2. Шаблоны проектирования
- •3.3. Структурные шаблоны: Декоратор, Заместитель, мост Декоратор (Decorator)
- •Заместитель (Proxy)
- •Мост (Bridge)
- •3.4. Структурные шаблоны: компоновщик и приспособленец Компоновщик (Composite)
- •Приспособленец (Flyweight)
- •3.5. Структурные шаблоны: адаптер и фасад Адаптер (Adapter)
- •Фасад (Façade)
- •3.6. Порождающие шаблоны: прототип, фабричный метод, одиночка Прототип (Prototype)
- •Фабричный метод (Factory method)
- •Одиночка (Singleton)
- •3.7. Порождающие шаблоны: абстрактная фабрика и строитель Абстрактная фабрика (Abstract factory)
- •Строитель (Builder)
- •3.8. Шаблоны поведения: стратегия, состояние, шаблонный метод Стратегия (Strategy)
- •Состояние (State)
- •Шаблонный метод (Template method)
- •3.9. Шаблоны поведения: цепочка обязанностей и команда Цепочка обязанностей (Chain of responsibility)
- •Команда (Command)
- •3.10. Шаблоны поведения: итератор, посредник, наблюдатель Итератор (Iterator)
- •Посредник (Mediator)
- •Наблюдатель (Observer)
- •3.11. Шаблоны поведения: посетитель, интерпретатор, хранитель Посетитель (Visitor)
- •Интерпретатор (Interpreter)
- •Хранитель (Memento)
- •3.12. Некоторые неклассические шаблоны проектирования
- •Неизменный объект (Immutable object)
- •Пул объектов (Object pool)
- •Отложенная инициализация (Lazy initialization)
- •Нулевой объект (Null object)
- •3.13. Антипаттерны
- •3.14. Архитектура прогРаммного Обеспечения
- •«Клиент-сервер»
- •Архитектура, основанная на использовании компонентов
- •Многоуровневая архитектура
- •Шина сообщений
- •Выделенное представление
- •Объектно-ориентированная архитектура
- •Архитектура, ориентированная на сервисы
Объектно-ориентированная архитектура
При использовании объектно-ориентированной архитектуры система воспринимается как набор взаимодействующих объектов. Каждый такой объект содержит данные и необходимое поведение, а коммуникация между объектами происходит через открытые интерфейсы и путем посылки и приема сообщений.
Главные принципы объектно-ориентированной архитектуры, в целом, соответствуют принципам ООП.
Использование абстракций (базовые классы, интерфейсы) для сокрытия деталей конкретных реализаций.
Использование агрегирования – построение сложных объектов, включающих простые объекты.
Наследование.
Инкапсуляция.
Полиморфизм.
Уменьшение связанности объектов друг с другом благодаря применению интерфейсов и объектных фабрик.
Преимуществами объектно-ориентированной архитектуры являются высокая тестируемость систем, расширяемость, способность к повторному использованию.
Рассмотрим одну из вариаций объектно-ориентированной архитектуры, известную как проектирование, основывающееся на домене6 (domain-driven design, DDD). DDD используется для разработки уровня домена – одного из уровней в многоуровневой архитектуре приложений. Уровень домена описывает модель, с которой работает система, включая данные и бизнес-логику. При создании уровня домена DDD сосредотачивается на следующих объектах:
Сущности (entities). Основные объекты модели, обладающие уникальным идентификатором. Например, при разработке системы интернет-магазина сущностями могут быть покупатель, заказ, товар.
Объекты-значения (value objects). Объекты, которые представляют сгруппированный набор атрибутов. Например, адрес, состоящий из города, улицы, номера дома. Объекты-значения используются как части сущностей и не обладают уникальным идентификатором.
Агрегаторы (aggregates). Это особый вид сущностей, содержащий вложенные сущности. Например, заказ может содержать список заказываемых товаров. Агрегируемые сущности не имеют самостоятельного значения и должны быть доступны только через агрегатор.
Хранилища (repositories). Методы или классы, используемые для сохранения сущностей во внешних источниках данных и для получения сущностей из источников.
Фабрики (factories). Методы или классы, используемые для создания новых сущностей и агрегаторов.
Архитектура, ориентированная на сервисы
Архитектура, ориентированная на сервисы (Service-Oriented Architecture, SOA), предоставляет требуемые функции в виде набора сервисов. Сервисы используют стандартные протоколы для вызова своих функций, публикации в сети и обнаружения. Отдельный сервис должен рассматриваться как независимое приложение, не как компонент или объект. Основной задачей при использовании SOA является определение интерфейса сервиса и схемы передаваемых при вызове сервиса данных.
Базовые принципы SOA:
Сервисы автономны и независимы друг от друга.
Сервисы распределены в локальной или глобальной сети. Местоположение сервиса не важно – главное, чтобы сеть доступа к сервису поддерживала требуемые протоколы.
Сервисы публикуют контракты использования и схемы для данных обмена, но скрывают внутренние классы своей реализации.
Преимуществами архитектуры, ориентированной на сервисы, являются высокая абстракция и возможность использования сервисов в различных приложениях.
1 Существуют средства интеграции NUnit и сред разработки приложений.
2 Алгоритмы не рассматриваются как шаблоны, так как они решают задачи вычисления, а не проектирования.
3 Команда авторов этой книги известна под названием «Банда четырёх» (Gang of Four, часто сокращается до GoF).
4 Подумайте, почему! (подсказка – оператор if)
5 Антипаттерн не имеет отношения к понятию исключительной ситуации (exception).
6 Этот термин введён Эриком Эвансом (Eric Evans) в книге Domain-Driven Design: Tackling Complexity in the Heart of Software.