この例を見てください。Supervisorドメイン クラスは、 GetUnderlings(DateTime from, DateTime to)メソッドを公開します。このメソッドは、指定された期間に指定されたスーパーバイザによって監督されたすべての人を返します。
セマンティック上の理由から、メソッドはここに配置する必要があります。しかし、DDD の純粋さを求めるなら別の場所に行くべきです。これは、リポジトリを使用するために必要なメソッドを実装することを想定しているためです。これをドメイン エンティティ内に埋め込むのは間違っているようです。その場合、メソッドはリポジトリまたはサービスに移動する必要があります - GetUnderlings(Supervisor Supervisor, DateTime from, DateTime to)
他の人はこのシナリオをどのように処理しますか?
編集: 力は次のように説明できると思います: OO プリンシパルによると、エンティティのパブリックインターフェイスで豊富なビジネス指向の機能を公開する必要があります。しかし、DDD 実装の原則によると、そのようなメソッドの実装は別の場所に配置するのが最適かもしれません。たとえば、サービスで。
この明らかな矛盾をどのように解決できますか? 私が見ることができる方法は次のとおりです。
- エンティティにサービスまたはサービス インターフェイスへの参照を持たせる
- エンティティに直接ではなく、常にクライアントをサービスに移動させます (結果: 一貫性が失われ、オブジェクト指向の観点からはまったくクールではありません)。
- 「ドメイン イベント」を使用する (?)
- AOP トリックを使用して、メソッドの実装をサービスに委譲します。