DDD - Несколько ограниченных контекстов из-за различий совокупных данных?
Мы пытаемся разделить наш домен на ограниченный контекст с целью иметь модульный дизайн / архитектуру приложения.
Мы провели поучительный сеанс EventSorming, который очень помог нам определить ограниченный контекст и его совокупности. После семинара каждый участник согласился с ограниченным контекстом, который мы определили.
Тем не менее мы чувствуем себя некомфортно, поскольку боимся, что наши ограниченные контексты все еще слишком велики. EventStomring фокусируется на доменных событиях / процессах, и это основной строительный блок, который мы использовали для определения наших ограниченных контекстов.
Мы также определили агрегаты, такие как "Контракт". Каждый контракт почти повторяет один и тот же процесс, но объем данных, содержащихся в этих контрактах, может существенно различаться. Существуют очень простые типы контрактов и типы контрактов, которые включают много дополнительных данных и вложений.
Имеет ли смысл объявлять другой ограниченный контекст только потому, что данные агрегата являются более сложными?
Оба подхода имеют свои недостатки:
- Реализация всех типов контрактов в одном ограниченном контексте может привести к большому количеству операторов if в коде для обработки различных данных.
- Извлечение нового ограниченного контекста может привести к большому количеству дублирующегося кода только потому, что некоторые данные отличаются.
Любые предложения / лучшие практики, как справиться с этим?
3 ответа
... доменные события / процесс, и это основной строительный блок, который мы использовали для определения наших ограниченных контекстов
BC не идентифицируются процессами, BC связаны с языком. Каждый БК имеет свой собственный вездесущий язык (UL). BC - это контекст, в котором понятие имеет значение. В любом случае БК принадлежат пространству решения. Прежде всего вы должны исследовать домен (проблемное пространство) и разбить его на поддомены, перегоняя основной домен. Затем вы моделируете каждый поддомен. BC - это контекст, в котором живет модель. В идеале отношения между поддоменами и BC должны быть 1:1.
Процесс обнаружения поддоменов является итеративным, и вы найдете их по мере знакомства с доменом, поговорив с экспертами. Когда вы находите слово, которое может иметь разные значения, или когда два разных слова имеют одно и то же значение, это означает, что вы пересекаете границу между БК.
Итак, идентификация поддоменов - это не процессы, а понятия и UL.
Имеет ли смысл объявлять другой ограниченный контекст только потому, что данные агрегата являются более сложными?
Нет, вы не должны создавать произвольные BC только потому, что агрегаты сложны. BC основаны на UL.
Любые предложения / лучшие практики, как справиться с этим?
Вам следует больше узнать о домене (контракт, типы и т. Д.), Поговорив с экспертами по домену, и изучить свой агрегат (согласованность транзакций)... В любом случае, если вы разбили свой агрегат на другие, это не означает, что они принадлежат разные BC, они все еще могут принадлежать одному BC. БК может иметь более одного агрегата. Все зависит от вашего конкретного домена.
Ограниченные контексты имеют мало общего с if-утверждениями, поэтому я не уверен, что вы имеете в виду.
Ограниченные контексты представляют собой семантически замкнутый набор бизнес-функций. По сути, ваш ограниченный контекст хорошо определен, если он может выполнять свои функции в полной изоляции, даже если другие контексты недоступны.
Кроме этого, вы можете иметь любой дизайн внутри контекста. Я чувствую, что количество выражений if больше зависит от вашего класса / дизайна кода, например, правильно ли вы используете полиморфизм, интерфейсы и тому подобное.
Но, к вашему мнению: вам не нужно, чтобы все было идеально с первого раза. Если вы определили некоторые действительные контексты, вы уже сделали сложную часть. Если какой-либо контекст можно разделить дальше, это может произойти позже в любое время с небольшим влиянием на других (поскольку контексты более или менее изолированы).
- Нет конкретных бизнес-команд для разных видов контрактов
- Нет специальной команды разработчиков для конкретных видов контрактов
- Один и тот же вездесущий язык используется для всех контрактов
- Каждый контракт почти повторяет один и тот же процесс
Для меня это признаки того, что все контракты принадлежат одному и тому же бизнес-поддомену и в идеале должны находиться в одном и том же ограниченном контексте - если только устаревшие или сторонние системы не вынуждают вас иначе.