Я застрял в поиске правильного способа ссылки на сущности , расположенные внутри совокупного корня , когда мы получили только их идентификаторы , исходящие из параметров URL. Я задал предыдущий вопрос , который в конечном итоге сосредоточился на объектах значений , поэтому здесь я начну с другого примера.
Допустим, мы хотим изменить OrderLine
внутри 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).
Как вы это работаете?