1

可能性の重複:
Why not use an IoC container to resolve dependencies for entities/business objects?DDD:リポジトリをエンティティに挿入することはできますか?

私は過去にvery similar questionを尋ねました。しかし、私はこれが自己複製ではないと信じています。私の元の質問に対する(良い)答えは、このドメインの問題に非常に特有であり、一般的な問題については論じません。私は、関連する境界と、Zone実体を持って

  • ;:

    は、私はaccrossに来たのは、新しい例を見てみましょう

  • 私は、locationzoneプロパティを持つStoreエンティティを持っています。
  • ZoneRepositoryは、Zoneに特定の場所が含まれています。

Storezoneプロパティを直接設定しませんが、このプロパティが割り当てられたときに代わりにlocationから控除することは絶対に避けてください。したがって、これを行うには論理的に聞こえます:

class Store 
{ 
    public void setLocation(Point location, ZoneRepository repo) 
    { 
     this.location = location; 
     this.zone = repo.findByLocation(location); 
    } 
} 

このアプローチには欠点がありますか?もしそうなら、現実的な選択肢を提案できますか?

+0

これは重複する質問ではありません。この質問はDDDの観点に関するものであり、重複した疑問はDDDとは関係ありません。 – fabien7474

+0

@ fabien7474 StackOverflowへようこそ。あなたはそれが価値があると思うなら、あなたはこの質問を再開するため投票することができます! – Benjamin

答えて

-1

ゾーンと場所の関係は何ですか?ゾーンにはLocationプロパティが必要ですか?そうでなければ、地域別にゾーンを検索することはできません。これは双方向の関係ですか?私がやっていることは、なぜあなたはこれをすることができないのですか?

class Store 
{ 
    public function setLocation(Point $location) 
    { 
     $this->location = $location; 
     $this->zone = $location->zone; 
    } 
} 

代わりに、あなたは上の層でリポジトリを使用するコールド、その後、ちょうどあなたが必要なものを渡す:

class Store 
{ 
    public function setLocation(Point $location, Zone $zone) 
    { 
     $this->location = $location; 
     $this->zone = $zone; 
    } 
} 

一般的に、私は、どうしても必要にリポジトリを注入しないだろうこの状況ではそうではありません。それでも、私はそれをメソッドに渡すことはしません。IOCコンテナを使用してメソッドに渡します。

+0

質問にはおそらく不明ですが、場所は「ポイント」で、ゾーンの境界は「ポリゴン」です。店舗の場所が地図上で特定されると、どの地点にその地点が含まれているかを調べる必要があります。 – Benjamin

+0

その場合、私は2番目の提案に行きます。 –

+0

これは確かに解決策ですが、このメソッドが一貫した 'location' <->' zone'データで呼び出されるという保証はありません! – Benjamin

関連する問題