Domain-Driven Design (DDD): понятия, контексты и пример
Domain-Driven Design (DDD) — подход к проектированию программных систем вокруг предметной области: её языка, правил и границ ответственности. Он полезен, когда разные подразделения вкладывают разный смысл в одни и те же понятия и эти различия нужно отразить в архитектуре.
Это учебный раздел курса «Современная архитектура хранилища данных». Здесь можно разобрать стратегическое проектирование, ограниченные контексты и доменные модели, а затем перейти к подробным материалам ниже.
Пример DDD: один заказ — три контекста
| Контекст | Что означает заказ | За что отвечает |
|---|---|---|
| Продажи | Обещание клиенту: состав, цена, условия | Правила оформления и изменения заказа |
| Оплата | Обязательство, платёж и возврат | Учёт оплаты и возврата средств |
| Доставка | Отправление с адресом и статусами | Передача перевозчику и отслеживание |
Это учебный пример, а не готовое разбиение любой системы. В контексте доставки не требуется копировать всю модель продаж. Достаточно согласовать идентификатор заказа и контракт передаваемых данных. Для аналитической витрины нужно отдельно определить, что считать «оплаченным» и «доставленным» заказом и какое событие меняет этот статус.
Какие понятия изучить сначала
- Ubiquitous Language — согласованный язык бизнеса и команды разработки внутри контекста.
- Bounded Context — граница, внутри которой модель и термины имеют согласованный смысл.
- Entity — объект с идентичностью; Value Object определяется значениями своих свойств.
- Aggregate — группа связанных объектов с границей согласованного изменения.
- Context Map — описание отношений и контрактов между контекстами.
Когда DDD оправдан
DDD полезен при сложных бизнес-правилах и нескольких командах, которым нужно согласовывать границы моделей. Для простого CRUD-приложения полный набор паттернов может увеличить стоимость разработки без заметной пользы. DDD можно применять в модульном монолите: микросервисы, CQRS и Event Sourcing не являются обязательными условиями.
Задание для самостоятельной проверки
Выберите процесс возврата заказа. Выпишите термины продаж, оплаты и доставки; найдите расхождения. Нарисуйте границы контекстов и один контракт события. Проверьте, какое подразделение отвечает за каждое бизнес-правило и как повторная доставка события повлияет на витрину.
Чтобы связать доменные модели с интеграцией данных и аналитикой, изучите программу курса «Современная архитектура хранилища данных». Для разбора архитектуры компании можно перейти в раздел консалтинга.
Документация
Материалы учебного раздела
- Введение в Domain-Driven Design: цели, термины и контекст применения
- Термины DDD: сущности, значения объектов, агрегаты и доменные сервисы
- Основы стратегического проектирования: контексты, границы и язык
- Bound Context: принципы определения границ и взаимодействия
- Ubiquitous Language: создание, внедрение и поддержка общего языка в организации
- Контекстная карта: сопоставление контекстов, отношения и маршруты интеграции
- Антикоррупционный слой: защита границ контекстов и минимизация зависимости
- Стратегические паттерны взаимодействия контекстов: Open Host Service, Shared Kernel, Customer-Supplier
- Моделирование предметной области: от бизнес-целей к доменным моделям
- Агрегаты и консистентность: границы транзакций и управление целостностью
- Значения объектов и доменные типы: правила моделирования
- Репозитории, фабрики и доменные сервисы
- Доменные события: моделирование, события-потоки и обработчики
- CQRS и Event Sourcing: принципы, сценарии применения и ограничения
- Интеграционные контракты: API, события, схемы и контрактное тестирование
- Версионирование контрактов и совместимость между контекстами
- Архитектурные паттерны DDD: Анти-коррупционный слой, Open Host Service, Shared Kernel, Customer-Supplier
- Архитектура под DDD: микросервисы, монолит и гибридные подходы
- Интеграция с внешними системами: стратегии устойчивости и контрактов
- Эволюция доменной модели: миграции контекстов и рефакторинг моделей
- Безопасность и соответствие в DDD-проектах
- Тестирование DDD: доменные тесты, контрактное тестирование и тестирование интеграций
- DevOps и инфраструктура для DDD: CI/CD, инфраструктура как код и окружения
- Наблюдаемость и эксплуатация доменных контекстов
- Производительность, масштабирование и устойчивость доменной архитектуры
- Риски, типичные ошибки и методы профилактики
- Модель зрелости DDD: оценка зрелости и дорожная карта эволюции
- План внедрения: переход от концепций к реальной реализации в организации
- Управление изменениями требований и бизнес-приоритетов
- Практические кейсы: отраслевые примеры применения DDD
- Практические сценарии интеграции: legacy-системы, миграции данных и параллельная интеграция
- Инструменты и технологии под DDD: языки моделирования, фреймворки и контрактное тестирование
- Кейсы архитектурной трансформации: переход к контекстно-ориентированной архитектуре




