Совокупные корни - PullRequest
       16

Совокупные корни

1 голос
/ 23 февраля 2012

Рассмотрим следующую структуру: Клиент-> Заказы-> OrderLines-> Количество и Клиент является совокупным корнем.

Предположим, что мы хотим изменить количество одной строки заказа, как бы мы это сделали?Будет ли у Клиента такой метод:

public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
    order.OrderLines.First(...).Quantity = quantity;
}

или будет реализация:

public ChangeQuantity(Order order, OrderLine orderLine, int quantity)
{
    order.ChangeQuantity(orderLine, quantity);
}

Ответы [ 2 ]

7 голосов
/ 23 февраля 2012

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

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

Так что нет причин использовать какой-либо метод, поскольку ваш пользователь может просто перейти непосредственно к объекту строки заказа:

OrderLine.Quantity = 5;

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

7 голосов
/ 23 февраля 2012

Определенно последний. Если вы подумаете об этом, первый подход нарушает Закон Деметры - и это действительно основное свойство DDD.

Но если вы уже передаете заказ и строку заказа, почему вызывающая сторона не выполняет вызов метода?

...