Доменно-ориентированное проектирование (DDD) — это подход к разработке программного обеспечения, фокусирующийся на глубоком понимании предметной области (домена) и моделировании ее в коде. Основная цель — создать систему, которая точно отражает бизнес-логику и легко адаптируется к изменениям в предметной области.
Ключевые концепции DDD:
- Ubiquitous Language (Единый язык): Общий язык, используемый всеми участниками проекта (разработчики, эксперты в домене, пользователи) для общения о предметной области. Этот язык затем отражается в коде.
- Domain Model (Модель домена): Объектная модель, представляющая бизнес-концепции, связи и правила предметной области.
- Bounded Context (Ограниченный контекст): Явное определение границ, в пределах которых модель домена имеет конкретное значение. Разные контексты могут иметь разные модели для одного и того же понятия.
- Aggregates (Агрегаты): Группа связанных объектов предметной области, рассматриваемых как единое целое для обеспечения согласованности данных. У агрегата есть корневой объект (Root), через который происходят все операции.
- Entities (Сущности): Объекты, имеющие уникальную идентичность в течение своего жизненного цикла, независимо от своих атрибутов.
- Value Objects (Объекты-значения): Объекты, определяемые своими атрибутами, а не уникальной идентичностью. Они являются неизменяемыми.
- Domain Events (События домена): Что-то важное, что произошло в предметной области и может представлять интерес для других частей системы.
- Repositories (Репозитории): Объекты, инкапсулирующие логику доступа к данным для агрегатов.
- Services (Сервисы): Операции, которые не имеют естественного места в объектах сущностей или объектов-значений. Бывают доменные сервисы и сервисы приложения.
Применение DDD помогает создавать более понятные, поддерживаемые и гибкие системы, особенно для сложных предметных областей.