DDD: ссылка на объект внутри совокупного корня по его идентификатору

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

Допустим, мы хотим изменить OrderLine внутри Order :

  • Пользователь переходит на страницу, где он может увидеть сводку заказа вместе со всеми его строками Order.
  • Пользователь нажимает кнопку редактировать рядом со строкой заказа.
  • Его направляют на edit-order-line? OrderId = x & orderLineId = y

Теперь, если мне нужно обновить количество в OrderLine, я могу сделать:

Order order = orderRepository.find(orderId);
order.updateQuantity(orderLineId, 2);

Однако я не чувствую очень доволен идеей передать Ордену ответственность за извлечение частей себя с помощью Id. Я считаю, что внутри домена мы должны просто разговаривать с объектами , а не с идентификаторами. Идентификаторы не являются частью вездесущего языка , и я считаю, что они должны находиться вне домена, например, в контроллере.

Я бы чувствовал себя более уверенно, используя что-нибудь вроде:

Order order = orderRepository.find(orderId);
OrderLine orderLine = em.find(OrderLine.class, orderLineId);
order.updateQuantity(orderLine, 2);

Хотя мне тоже не нравится идея прямого взаимодействия с Entity Manager. Мне кажется, что я обхожу обязанности репозитория и агрегированного корня (потому что я потенциально мог напрямую взаимодействовать со строкой OrderLine).

Как вы это работаете?

9
задан Community 23 May 2017 в 12:04
поделиться