集約 root内にあるエンティティーを参照する適切な方法を見つけることに行き詰まっています。URL パラメーターからのIDしか取得していない場合です。値オブジェクトに焦点を当てた前の質問をしたので、ここで別の例から始めます。
OrderLine
an内の anを変更したいとしましょうOrder
:
- ユーザーは、注文の概要とそのすべての注文明細を確認できるページに移動します。
- ユーザーは、注文明細の横にある編集ボタンをクリックします。
- 彼は指示されます
edit-order-line?orderId=x&orderLineId=y
OrderLine の数量を更新する必要がある場合は、次のようにします。
Order order = orderRepository.find(orderId);
order.updateQuantity(orderLineId, 2);
しかし、ID によって自分自身の一部を取得する責任をオーダーに任せるという考えにはあまり満足できません。この件に関する私の見解は、ドメイン内ではオブジェクトとだけ話すべきであり、ID とは決して話すべきではないということです。Id はユビキタス言語の一部ではありません。ID はドメインの外、たとえば Controller 内に存在する必要があると思います。
次のようなものを使用すると、より自信が持てます。
Order order = orderRepository.find(orderId);
OrderLine orderLine = em.find(OrderLine.class, orderLineId);
order.updateQuantity(orderLine, 2);
Entity Manager と直接対話するという考えも好きではありませんが。リポジトリと集約ルートの責任をバイパスしているように感じます (潜在的に、OrderLine と直接対話できるため) 。
それをどのように回避しますか?