タグ付けされた質問 「lazy-initialization」


6
エンティティメソッドコールでのDDDインジェクションサービス
質問の短い形式 エンティティメソッドの呼び出しにサービスを注入することは、DDDおよびOOPのベストプラクティスの範囲内ですか? 長い形式の例 DDDに従来のOrder-LineItemsケースがあるとします。ここでは、Orderと呼ばれるドメインエンティティがあり、これは集約ルートとしても機能し、そのエンティティは値オブジェクトだけでなく、ラインアイテムのコレクションからも構成されます。エンティティ。 アプリケーションで流暢な構文を使用して、次のようなことができると仮定します(getLineItemsメソッドを呼び出す2行目の構文に注目してください)。 $order = $orderService->getOrderByID($orderID); foreach($order->getLineItems($orderService) as $lineItem) { ... } OrderEntityにLineItemRepositoryを挿入したくないのは、それが考えられるいくつかの原則に違反しているためです。しかし、構文の流暢さは私たちが本当に望んでいるものです。それは、テストだけでなく、読みやすく、保守しやすいからです。 のメソッドgetLineItemsに注意して、次のコードを検討してくださいOrderEntity。 interface IOrderService { public function getOrderByID($orderID) : OrderEntity; public function getLineItems(OrderEntity $orderEntity) : LineItemCollection; } class OrderService implements IOrderService { private $orderRepository; private $lineItemRepository; public function __construct(IOrderRepository $orderRepository, ILineItemRepository $lineItemRepository) { $this->orderRepository = $orderRepository; …

4
遅延初期化をJavaに組み込むことができなかった理由はありますか?
私はユーザーの非永続状態がまったくないサーバーで作業しているため、ユーザー関連のすべてのオブジェクトは、すべてのリクエストでロールアウトされます。 その結果、未使用になる可能性のあるオブジェクトのプロパティを遅延初期化していることがよくあります。 protected EventDispatcher dispatcher = new EventDispatcher(); なる... protected EventDispatcher<EventMessage> dispatcher; public EventDispatcher<EventMessage> getEventDispatcher() { if (dispatcher == null) { dispatcher = new EventDispatcher<EventMessage>(); } return dispatcher; } これをJavaに組み込むことができなかった理由はありますか? protected lazy EventDispatcher dispatcher = new EventDispatcher(); 以下のコメントで述べたように、言語は理論的に進化して、必要なほとんどすべてのものを含めることができることを理解しています。可能性の実用的な測定方法を探しています。これは他の機能と競合しますか?実装は、JVMが存在する場合でもうまく機能するように単純ですか?そして、それは良い考えですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.