たとえば、次のアセンブリに分離された単純な ASP.NET MVC ソリューションなど、疎結合レイヤーを実装し、IoC コンテナーなどを実装することで、SoC の原則に準拠することになっているコード プロジェクトがあるとします。
- アプリケーションアセンブリ + 名前空間
- モデルアセンブリ + 名前空間 (DB データにアクセスするための具体的なリポジトリが含まれています)
また、モデルアセンブリの具体的なリポジトリが共通のインターフェイスを実装する必要IMyBusinessRepository
がある場合、そのインターフェイスをどのアセンブリに配置しますか?
1) そのインターフェイスをモデルアセンブリに配置すると、アプリケーションアセンブリのコードを変更せずに、そのアセンブリを別のアセンブリに置き換えることは不可能になる可能性があります (少なくとも名前空間が異なる場合) 。また、別のアセンブリに存在する代替 IMyBusinessRepository
実装は、元のアセンブリを参照する必要があります (うわあ!)
2) アプリケーション アセンブリに配置すると、アプリケーションアセンブリを参照せずに他のプロジェクトでモデルアセンブリを使用することはできなくなります(うわぁ!)
3) または、そのインターフェイス専用の共通アセンブリを個別に作成しますか?さらに言えば、共通インターフェイスまたはインターフェイスのセットごとに個別の共通アセンブリを作成しますか? (うーん?)
要約すると、Xアセンブリは、アプリケーションAで(参照を変更するだけで) 簡単に置き換え可能であり、アプリケーションB、C、Dで再利用できる必要があります。