Доступ к сущностям, которые не являются совокупным корнем

StackOverflow https://stackoverflow.com/questions/4851473

Вопрос

Я смотрю на DDD, и у меня есть некоторые мысли. На сайте покупок у меня есть типичный заказ.

public class Order
{
    public ICollection<OrderRow> OrderRows { get; set; }
    public ICollection<Payment> Payments { get; set; }
    ...
}

Платежи, кажется, естественны для размещения на заказ. При размещении заказа или работы с заказом платежи являются частью заказа.

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

Как мне это сделать? Должны ли платежи быть удалены из заказа и быть его собственным корневым заполнителем?

Это было полезно?

Решение

Насколько я понимаю, агрегаты могут и будут перекрываться, что позволяет вам определить заполнитель, который имеет наибольший смысл для бизнес -контекста текущей операции.

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

Другие советы

Я думаю, что платежная организация не принадлежит агрегату заказа. Как вы написали, у вас есть функциональность, которая работает с платежами отдельно. Это означает, что платежи не используются только в контексте порядка. Это означает, что платежи не принадлежат агрегату заказа :).
Однако можно иметь имущество платежей в классе заказа, даже если оно не является частью агрегата заказа.

Если платеж не может существовать без заказа, платеж не является совокупным корнем.

Если это не агрегатный корень, то загрузка соответствующих объектов заказа из OrderRepository и работа над платежными объектами внутри, по -видимому, обладает наибольшей целостностью DDD.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top