プレゼンテーション レイヤー (PL)、ビジネス ロジック レイヤー (BLL)、データ アクセス レイヤー (DAL) の 3 層アーキテクチャを構築しています。
従来の 3 層アーキテクチャ ロジックでは、BLL が PL と DAL の間のメディエータとして機能する必要があるとされています。PL はデータベースの存在を認識することさえできませんが、DAL は BLL または PL の存在を認識する必要がありません。
上記を実装すると、次のように 3 つの異なる物理プロジェクト間で次の依存関係が作成されます。
- PL プロジェクト -> BLL DLL のリファレンス
- BLL プロジェクト -> DAL DLL のリファレンス
- DAL プロジェクト -> 参照なし
ただし、DAL を実装するために BLL でインターフェイスを定義し、コンストラクター インジェクションを介して DI を使用することにより、BLL と DAL の間に IOC の概念を適用すると、依存関係が次のように変更されます。
- PL プロジェクト -> BLL DLL の参照、DAL DLL の参照 (BLL オブジェクトのコンストラクタへの具象型の DI 用)
- BLL プロジェクト -> 参照なし
- DAL プロジェクト -> BLL DLL のリファレンス (BLL インターフェイスの実装用)
では、IOC と従来の 3 層は対立しているのでしょうか。
理想的には、DI で IOC を維持しながら、次のことを達成したいと考えています。
- PL プロジェクト -> BLL DLL のリファレンス
- BLL プロジェクト -> 参照なし
- DAL プロジェクト -> BLL DLL のリファレンス
これどうやってやるの ?