DDD: стратегический — bounded context, ubiquitous language, context map
↑ 8.2 Архитектурные стили и DDD · ← Предыдущая · → Следующая
Зачем это на собесе
Стратегический DDD — про границы систем и язык; на senior-уровне важнее тактических приёмов.
Объяснение
Domain-Driven Design — подход к сложным предметным областям: модель строится вместе с экспертами домена и отражает их язык.
| Понятие | Смысл |
|---|---|
| Domain / Subdomain | область бизнеса; поддомены: core (конкурентное преимущество), supporting, generic (готовые решения) |
| Ubiquitous Language | единый язык разработчиков и экспертов; терминология в коде совпадает с бизнесом |
| Bounded Context | граница, внутри которой модель и термины однозначны |
| Context Map | карта отношений между контекстами |
Один термин в разных контекстах означает разное: «Клиент» в продажах (заказы, скидки) и в доставке (адрес, телефон) — разные модели; общая единая сущность Customer на всё — источник связанности.
Паттерны отношений контекстов:
| Паттерн | Смысл |
|---|---|
| Shared Kernel | общий подмножество модели (осторожно) |
| Customer/Supplier | восходящий и нисходящий контексты, договорённости |
| Conformist | нисходящий принимает модель как есть |
| Anti-Corruption Layer | перевод чужой модели (см. Как строить интеграцию со сторонним API: адаптер, anti-corruption layer, таймауты, ретраи) |
| Open Host Service / Published Language | публичный протокол для многих потребителей |
| Separate Ways | контексты не интегрируются |
Bounded context часто совпадает с границей микросервиса или модуля монолита и командой (закон Конвея).
Event Storming — воркшоп для выявления доменных событий, команд и агрегатов вместе с бизнесом.
Нюансы и подводные камни
- DDD оправдан для сложной логики; для CRUD — избыточен.
- Не деление по технологиям, а по бизнес-смыслу.
- Неверные границы контекстов порождают распределённый монолит.
- Без участия экспертов DDD превращается в рисование диаграмм.
- Граница контекста ≠ таблица в БД.
Практика
- Проведите Event Storming для своего проекта и найдите контексты.
- Составьте Context Map с типами отношений.
- Найдите термин с разным смыслом в разных частях системы.
Вопросы с ответами
Что такое Bounded Context?
Граница, внутри которой доменная модель и язык непротиворечивы.
Что такое Ubiquitous Language?
Общий язык команды и бизнеса, используемый в разговорах и в коде.
Что такое Anti-Corruption Layer?
Слой перевода между моделями контекстов, защищающий модель от чужих понятий.