Объектно-ориентированная архитектура

При использовании объектно-ориентированной архитектуры (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). Методы или классы, используемые для создания новых сущностей и агрегаторов.