Доступ к объектам, которые не являются совокупным корнем - PullRequest
0 голосов
/ 31 января 2011

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

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

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

0 голосов
/ 24 августа 2012

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

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

0 голосов
/ 01 февраля 2011

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

...