5

プレゼンテーション レイヤー (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 のリファレンス

これどうやってやるの ?

4

1 に答える 1

2

最初に、インターフェイスを使用してレイヤーを切り離すことを検討できます。インターフェイスは個別の dll に分離できます。このように、各レイヤーは下のレイヤーのインターフェースにのみ依存します。

また、DAL から BLL への結合が必要な理由もわかりません。これはコールバック用ですか?代わりにイベントを使用できませんか?

3 つの層すべてがプロセス内で実行され、PL がアプリ (コンポジション ルート) への「エントリ ポイント」であると仮定すると、IMO は、PL のブートストラップ コードを使用してインターフェイスを分離した場合の通常の依存関係は次のとおりです。

  • PL => BLL と DAL (具象とインターフェイス) への参照、および IoC コンテナー
  • BLL 参照 DAL (または、該当する場合はインターフェイスのみ)
  • DAL 依存関係なし (ただし、通常は DTO / POCO / エンティティに依存します)

PL は IoC 構成を Bootstrapper dll にオフロードできるため、次の結果が得られます。

  • PL => BLL インターフェイスとブートストラップへの参照
  • Bootstrapper => すべてと IoC コンテナを参照
  • BLL => リファレンス DAL インターフェイス
  • DAL => 依存関係なし (ただし、通常は DTO / POCO / エンティティに依存します)

一部のコンテナーでは、構成または規則を使用して、ブートストラップからすべての dll を参照する必要を回避できます。ただし、これらの dll はアプリと共に展開する必要があることは明らかです。

于 2012-07-05T05:50:45.423 に答える