Как спроектировать совокупные корни для модели отслеживания запасов с использованием DDD? - PullRequest
1 голос
/ 29 сентября 2019

Для следующей модели анемичного домена:

  • stock: id, code, description, total_amount - конкретный тип запаса, а total_amount рассчитывается для ускоренного просмотра, показывающего оставшееся количество,
  • stock_arrival: id, date, document_id -событие поступления акций и ссылочный документ с деталями, используя document_id по причинам бюрократии / истории,
  • stock_arrival_line: stock_arrival_id, stock_id, quantity, unit_price - строка, описывающая конкретное изменение запасов по прибытии, включая цены,
  • stock_removal: id,... -событие удаления запаса,
  • stock_removal_line: stock_removal_id, stock_id - строка, описывающая конкретное изменение запаса при событии удаления,
  • ... другие события изменения запаса ...

анемичноеМодель предметной области имеет следующие ограничения отношений:

  • stock_arrival_line:stock_id ссылки stock:id,
  • stock_arrival_line:stock_arrival_id ссылки stock:id,
  • stock_removal_line:stock_id ссылки stock:id,
  • stock_removal_line:stock_removal_id ссылки stock:id,

Возможно, stock и stock_arrival / stock_removal должны быть агрегированными корнями, ..

Домен выше показывает, что существует отношение «многие ко многим» между stock и stock_arrival / stock_removal посредством таблиц сопоставления, иэто основная часть, которая касается меня.

Инварианты должны быть определены только для совокупного корня и его внутренних компонентов.Следовательно, в совокупности stock необходимо хранить stock_arrival_line / stock_removal_line, чтобы заполнить совокупность stock.

Однако то же самое относится к корням совокупности stock_arrival / stock_removal, что они должны содержать в себе stock_arrival_line / stock_removal_line соответственно, чтобы эти совокупные корни о событиях были завершены.

Когда следуют DDD, где эти ...line должны принадлежать?Должны ли они быть продублированы?Или, должно ли это быть смоделировано совершенно по-другому?


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

1 Ответ

0 голосов
/ 29 сентября 2019

В вашем случае Stock должен быть агрегатным корнем.StockArrival и StockRemoval могут расширять класс событий, и вы можете переименовать его в StockArrived и StockRemoved в соответствии с прошедшим временем, характерным для объекта типа события.Кроме того, события могут содержать список Line экземпляров (где Line - абстрактный класс, подклассы которого StockArrivalLine и StockRemovalLine) и ссылаться на агрегат Stock через атрибут stockId из событиякласс.В реальной жизни Line в документе не имеет id, но orderNumber.В случае атрибута id из класса Line имя звучит очень синтетически, я думаю, что вы должны переименовать его в orderNumber.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...