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