Я застрял в поиске правильного способа обращения к сущностям , находящимся внутри совокупного корня , когда мы получили только их идентификаторы из параметров URL , Я задал предыдущий вопрос , который в конечном итоге сфокусировался на объектах значений , поэтому я начинаю с другого примера здесь.
Допустим, мы хотим изменить OrderLine
внутри Order
:
- Пользователь переходит на страницу, где он может видеть сводку заказа вместе со всеми его строками заказа.
- Пользователь нажимает кнопку edit рядом со строкой заказа.
- Он получает указание на
edit-order-line?orderId=x&orderLineId=y
Теперь, если мне нужно обновить количество в OrderLine, я могу сделать:
Order order = orderRepository.find(orderId);
order.updateQuantity(orderLineId, 2);
Тем не менее, я не чувствую себя очень комфортно с мыслью о том, чтобы передать Ордену ответственность за получение его частей по Ид. Мой взгляд на эту тему заключается в том, что внутри домена мы должны просто общаться с объектами , а не с идентификаторами. Идентификаторы не являются частью вездесущего языка , и я считаю, что они должны находиться за пределами домена, например, в Controller.
Я бы чувствовал себя более уверенно с чем-то вроде:
Order order = orderRepository.find(orderId);
OrderLine orderLine = em.find(OrderLine.class, orderLineId);
order.updateQuantity(orderLine, 2);
Хотя мне и не нравится идея взаимодействия напрямую с Entity Manager. Мне кажется, что я обхожу обязанности репозитория и совокупного корня (потому что я мог бы , потенциально, напрямую взаимодействовать с OrderLine).
Как вы обходите это?