Объектно-ориентированная архитектура
При использовании объектно-ориентированной архитектуры (object-oriented architecture) система воспринимается как набор взаимодействующих объектов. Каждый такой объект содержит данные и необходимое поведение, а коммуникация между объектами происходит через открытые интерфейсы путём посылки и приёма сообщений.
Главные принципы объектно-ориентированной архитектуры, в целом, соответствуют принципам ООП:
1. Использование абстракций (базовые классы, интерфейсы) для сокрытия деталей конкретных реализаций.
2. Использование агрегирования – построение сложных объектов, включающих простые объекты.
3. Инкапсуляция.
4. Наследование.
5. Полиморфизм.
6. Уменьшение связанности объектов друг с другом благодаря применению интерфейсов и объектных фабрик.
Преимуществами объектно-ориентированной архитектуры являются высокая тестируемость систем, расширяемость, способность к повторному использованию.
Рассмотрим одну из вариаций объектно-ориентированной архитектуры, известную как проектирование, основывающееся на домене[2] (domain-driven design, DDD). DDD используется для разработки уровня домена – одного из уровней в многоуровневой архитектуре приложений. Уровень домена описывает модель, с которой работает система, включая данные и бизнес-логику. При создании уровня домена DDD сосредотачивается на следующих объектах:
1. Сущности (entities). Основные объекты модели, обладающие уникальным идентификатором. Например, при разработке системы интернет-магазина сущностями могут быть покупатель, заказ, товар.
2. Объекты-значения (value objects). Объекты, которые представляют сгруппированный набор атрибутов. Например, адрес, состоящий из города, улицы, номера дома. Объекты-значения используются как части сущностей и не обладают уникальным идентификатором.
3. Агрегаторы (aggregates). Это особый вид сущностей, содержащий вложенные сущности. Например, заказ может содержать список заказываемых товаров. Агрегируемые сущности не имеют самостоятельного значения и должны быть доступны только через агрегатор.
4. Хранилища (repositories). Методы или классы, используемые для сохранения сущностей во внешних источниках данных и для получения сущностей из источников.
5. Фабрики (factories). Методы или классы, используемые для создания новых сущностей и агрегаторов.