DDD レイヤード アーキテクチャの依存関係について質問を受けました。リポジトリの実装がインフラストラクチャ レイヤーにある場合、エンティティはリポジトリの実装で参照されるため、インフラストラクチャ レイヤーがドメイン レイヤーに依存していることを意味します。
一方、インフラストラクチャ サービスがドメインで使用されている場合、ドメイン レイヤはインフラストラクチャ レイヤへの参照を持つことができます。
これは循環参照を作成しませんか?
DDD レイヤード アーキテクチャの依存関係について質問を受けました。リポジトリの実装がインフラストラクチャ レイヤーにある場合、エンティティはリポジトリの実装で参照されるため、インフラストラクチャ レイヤーがドメイン レイヤーに依存していることを意味します。
一方、インフラストラクチャ サービスがドメインで使用されている場合、ドメイン レイヤはインフラストラクチャ レイヤへの参照を持つことができます。
これは循環参照を作成しませんか?
はい、あなたの場合。そして、私は同じ質問をしています:)
これが私の説明です:
eric evans のアーキテクチャ図では、インフラストラクチャ レイヤーが特別なレイヤーのようです。インターフェイス、アプリケーション、ドメインを実装します。
これは一種のこじつけです.....
しかし一方で、インフラストラクチャ コンポーネントは通常、アダプター、トランスレーター、およびファサードで構成されているため、インフラストラクチャーを個別のアダプター モジュールに分割することもできます。
例えば、
1) MailManager を DomainService に注入すると、ドメインはメーリングに依存する可能性があります。2) 永続性はドメインに依存します (リポジトリの場合)。
しかし、メーリングと持続性を 2 つのモジュールに分離すると、相互に依存関係がなくなります。これにより、問題が軽減される可能性があると思います。
結局のところ、レイヤー化は目的ではなくコンポーネントを分離する方法です。
最後になりましたが、より説得力のある回答を期待しています:)