1. Разделение на стратегический и тактический уровниDDD делится на два ключевых уровня:
- Стратегический уровень – определяет границы предметной области, разрабатывает контексты и управляет взаимодействием между ними.
- Тактический уровень – реализует детали проектирования, такие как сущности, агрегаты, репозитории и доменные события.
2. Границы контекста (Bounded Context)Каждое приложение охватывает несколько контекстов, где одни и те же термины могут означать разные вещи. Например, в системе интернет-магазина термин "Заказ" может означать разные вещи для отдела логистики и отдела продаж. DDD определяет
границы контекста (Bounded Context), чтобы избежать путаницы и изоляции изменений внутри конкретной части системы.
3. Единый язык (Ubiquitous Language)DDD требует, чтобы разработчики, аналитики и бизнес-эксперты использовали
единый язык, основанный на терминах предметной области. Это позволяет минимизировать недопонимание между участниками процесса разработки и создать четкую модель системы.
4. Агрегаты (Aggregates)Агрегаты – это группы объектов, которые управляются как единое целое. Внутри агрегатов одна сущность называется
агрегатным корнем, и все внешние изменения проходят через него. Например, в системе заказов агрегатом может быть "Заказ", а его корнем – "Заказ" с вложенными "Позициями заказа".
5. Репозитории (Repositories)
Репозитории – это слои доступа к данным, которые позволяют отделить доменную логику от инфраструктуры хранения (баз данных, API и т. д.). Например,
OrderRepository может предоставлять методы FindById(id), Save(order), Delete(order).
6. Доменные события (Domain Events)DDD активно использует событийную модель, где значимые изменения в системе представляются как
доменные события. Например, "ЗаказСоздан" или "ОплатаПринята".