От концептуальной модели DDD к модели предметной области с агрегированными корнями

Я пытаюсь смоделировать свой домен на основе существующей системы на основе C # WinForm, которую я сделал, чтобы улучшить свое обучение DDD, поэтому я собрал гипотетическую концептуальную модель, чтобы упростить задачу. Сама система не имела типичного бизнес-домена с большим количеством логики, смешанной с объектами Entity Framework, которые использовались во всех аспектах системы. Я чувствую, что это был Большой шар грязи (BBOM).

Я работал над некоторыми концепциями DDD на работе, но я хочу улучшить свое общее понимание. Я прочитал Голубую книгу Эванса «Доменно-ориентированный дизайн: преодоление сложности в основе программного обеспечения» и Скотта Миллетса «Паттерны, принципы и практики предметно-ориентированного дизайна». Помимо просмотра бесчисленных видео по этой теме, а также статей Вона Вернона. Я чувствую, что за прошедшие годы я сделал больше разработок, основанных на данных, и для этого требуется возраст.

Таким образом, гипотетическая система - это система строгого контроля качества строительных продуктов, которая примерно соответствует моей системе.

Вот концептуальная модель:

Концептуальная модель

Теперь я вижу три части этого - не обязательно ограниченные контексты, но я изо всех сил пытаюсь определить, где лежат эти ограниченные контексты.

Бизнес-процесс состоит из 3 частей:

  1. Определение продуктов

Для этого «пользователь» вводит различную информацию о продукте, включая название. В рамках этого они определяют, какой толщины должно быть изделие и из какого материала оно изготовлено. Они также определят, какой процесс необходимо использовать Builder для создания продукта. Они также определяют, требуется ли визуальный осмотр и проверка качества.

  1. Создать продукт

В рамках процесса «строитель» соберет изделие. Но это касается исключительно квалификации строителя. Строитель квалифицируется в отношении процесса, основанного на диапазоне толщины и материала, поэтому бизнес-правило разрешает выбирать строителя только в том случае, если он соответствует требованиям к толщине продукта, находящейся между диапазоном толщины процесса и материалом.

  1. Осмотр

После того, как Продукт построен, его можно осмотреть. В рамках этого, в зависимости от того, требуется ли визуальный контроль или проверка качества, обновленный квалифицированный «инспектор» сможет осмотреть Продукт. Они либо пройдут, либо не пройдут проверку.

В рамках этих процессов статус продукта будет обновляться. Это будет:

  • Не собран
  • Собранный
  • Частично проинспектирован (одна из двух инспекций выполнена)
  • Пройдена проверка (все проверки выполнены)
  • Неудачная проверка (неудачная проверка)

Ниже приводится некоторая информация о системе за пределами домена, о которой нужно подумать:

  • Система разработана так, чтобы быть многопользовательской, в которой можно одновременно вводить проверки.
  • Возможно, что данные о продукте были введены неверно, что может быть исправлено, что может сделать недействительными любые введенные данные сборки и проверки.
  • Введенные данные затем используются в различных отчетах.

Итак, мне нужны идеи относительно:

  1. Где лежат мои ограниченные контексты.
  2. Как смоделировать мои агрегированные корни - какие данные должны быть корнем и какие объекты / объекты значений я должен включить.

    Включаю ли я данные только тех объектов домена, которые мне нужны, в ограниченный контекст, т.е. не гидратирую объекты домена полностью.

  3. Как реализовать что-то для расчета статусов через различные части процесса.

  4. Как обрабатывать случаи, когда данные могут быть введены неправильно, чтобы данные домена оставались правильными.

Меня не интересует какая-либо реализация репозитория, только концепции чистой предметной области, хотя мне может помочь вопрос, что мы должны сохранять для каждого ограниченного контекста.

У меня есть опасения, что несколько пользователей вводят данные, чтобы обеспечить единообразие данных о статусе продукта.


person Andez    schedule 02.04.2016    source источник
comment
Это разные проблемы. Думаю, вам стоит задать им отдельные вопросы.   -  person guillaume31    schedule 04.04.2016
comment
Ограниченный контекст / совокупный дизайн обычно является результатом анализа реальных ограничений и моделирования с помощью экспертов в предметной области. С надуманными доменами сложно работать, поскольку у вас нет этих серьезных деловых и технических ограничений, которыми вы могли бы руководствоваться. Со всеми этими вопросительными знаками, по которым у вас нет фактов из реального мира, есть высокий риск оказаться в параличе анализа.   -  person guillaume31    schedule 04.04.2016
comment
Согласовано. Но для того, чтобы здесь не усложнять пример, я объединил концепцию с тем, что, как я думал, было бы достаточно подробным, чтобы, надеюсь, получить некоторое представление о том, с чего начать. У меня есть ограничения на то, кому разрешено выполнять сборку на основе некоторых бизнес-правил. Эти данные фиксируются и вводятся. Модель предметной области предотвратит вход в сборку, в которой строитель не квалифицирован. Возможно, я слишком много вложил, но если я смогу перефразировать вопрос, я сделаю это - это будет примерно так, чтобы собрать код на диаграмме. Я предполагаю, что определение ограниченных контекстов придет позже. Есть предположения?   -  person Andez    schedule 05.04.2016


Ответы (1)


Одна вещь, которую вы должны учитывать, - это игнорировать DDD до тех пор, пока у вас не будет полезной начальной работающей модели домена, особенно если ваш домен крошечный. Забудьте об агрегатах и ​​ограниченных контекстах. Как и многие другие, вы рассматриваете эти «строительные блоки» DDD как «основные части» рабочего приложения. Они не ... ваша модель предметной области.

Учтите, что по умолчанию вам не нужно иметь ограниченные контексты, агрегаты, события домена, службы, репозитории или фабрики. Все эти концепции следует применять только там, где необходимо.

Вы знаете, как превратить модель предметной области в работающее приложение? Дай мне знать, если я смогу помочь.

person aryeh    schedule 17.04.2016
comment
Это тот рут, который я взял. В настоящее время я работаю над проблемной областью. Надеюсь, я отвечу, когда получу его, но пока я сосредоточился исключительно на функциональности предметной области - и меня удивило, как все может сочетаться естественным образом. Важным моментом в тот момент было полностью игнорировать то, что у меня было в модели данных, на которой была основана концептуальная модель. - person Andez; 17.04.2016
comment
Я начал исключительно с части модели «Сборка продукта», которая, кажется, хорошо сочетается друг с другом. Следующий шаг - это инспекция / контроль качества. Пока не особо задумывался об этом, но мне кажется, что это будет другая модель, а не одна и та же. Но не узнаю наверняка, пока не начну писать этот код. - person Andez; 17.04.2016