Ответ
Domain-Driven Design (DDD) — это подход к разработке сложного программного обеспечения, который фокусируется на глубоком понимании и моделировании предметной области (бизнес-логики).
Ключевые концепции DDD:
- Домен (Domain) — основная бизнес-проблема, которую решает система.
- Модель предметной области (Domain Model) — абстракция, отражающая ключевые бизнес-правила, процессы и сущности.
- Ограниченный контекст (Bounded Context) — четко определенная граница, внутри которой модель домена имеет конкретное, непротиворечивое значение. Например, сущность
Customerможет иметь разные атрибуты и поведение в контекстах "Продажи" и "Техподдержка". - Универсальный язык (Ubiquitous Language) — общий язык для общения между разработчиками и экспертами предметной области, используемый в коде и документации.
Основные строительные блоки модели:
- Сущность (Entity) — объект, имеющий уникальный идентификатор, который отличает его от других объектов, даже если их атрибуты совпадают (например,
Userс полемid). - Объект-значение (Value Object) — объект, не имеющий идентификатора; определяется исключительно своими атрибутами (например,
Moneyс полямиamountиcurrency). Два Value Object считаются равными, если равны все их поля. - Агрегат (Aggregate) — кластер связанных сущностей и объектов-значений, рассматриваемых как единое целое. Имеет корень (Aggregate Root), через который происходит все взаимодействие.
Пример на Java:
// Value Object (неизменяемый, определяется атрибутами)
public record Address(String street, String city, String postalCode) {}
// Entity (имеет идентификатор)
public class Customer {
private CustomerId id; // Value Object для ID
private Address address;
private String name;
// Бизнес-методы, инварианты...
}
DDD помогает создавать гибкие, поддерживаемые и тесно связанные с бизнес-требованиями системы.