Я новичок в DDD и в настоящее время смотрю на перестройку существующего приложения, начав с небольшого подтверждения концепции, пока я все еще нахожу свой путь с DDD.Мои вопросы здесь касаются лишь небольшой части модели предметной области, поэтому в настоящий момент она может показаться слишком упрощенной.
Это приложение для планирования работы медсестер, которые посещают пациентов в их домах.Таким образом, ясно, что «Пациент» - это один AggregateRoot, а «Медсестра» - это другой AggregateRoot.Нет прямой связи между пациентом и медсестрой, за исключением тех случаев, когда медсестре назначено посещение пациента с помощью объекта «Назначение».
Теперь объект назначения может легко принадлежать как пациенту, так и медсестре AR, или даже оба видят, что назначение является связующим звеном между ними.Таким образом, я также назначаю встречу в АР.Итак, первый вопрос:
1) Это моделирование звучит правильно?Первоначально я пытался добавить коллекцию сущностей Назначения в AR каждого пациента / медсестры, но поскольку он действительно принадлежит обоим, имеет смысл быть его собственным AR.Затем я подумывал добавить список идентификаторов встреч под AR медсестры / пациента, чтобы связать их с назначениями, но это означало бы, что транзакция по сохранению встречи должна затрагивать сразу несколько AR, что, как я могу сказать, подсказывает.плохой агрегатный дизайн.
Предполагая, что это моделирование имеет смысл до сих пор, теперь мне нужно найти лучший способ применения бизнес-правил, которые касаются всех трех текущих AR.Например, медсестра не может быть в нескольких местах одновременно, поэтому мы не можем назначить встречу одновременно с другой, назначенной той же медсестре.Также возможно иметь только одно ожидающее назначение на пациента.Итак, второй вопрос:
2) Как бы вы пошли в соблюдении таких правил, которые касаются нескольких разных AR?Очевидно, что правила можно было бы легко применять, и они были бы самодостаточны, если бы назначения были вложенным набором в рамках АР пациента или медсестры.Это заставляет меня задаться вопросом, правильное ли мое моделирование.
Я много читал о BC и Saga / Process Manager, но для меня это все часть одного BC, поэтому я не уверен, что мне нужновсе, что сложно.Допустимо ли просто иметь CommandHandler, который загружает несколько объектов AR и использует их состояние, чтобы определить, можно ли создать встречу или нет?
Если это так, и связать с Q1 выше (при условии, что я неt хранит список идентификаторов назначений под AR медсестры / пациента), модель считывания - единственный способ легко найти встречи, принадлежащие соответствующей медсестре / пациенту, - так что также допустимо применение бизнес-правил, основанных на состояниичитать модель, а не AR из хранилища?
Надеюсь, это имеет смысл, и заранее спасибо!