2

here MVC3 and Entity Frameworkで提案されているデザインに従って、MVC4 + EntitiFramework5 を使用して、DAL、BL、および Web 用のさまざまなレイヤーを作成しようとしています。

@David Pirasからの引用

1 - ProjectName.Interfaces (クラス ライブラリ、エンティティのインターフェイス);

2 - ProjectName.DAL (クラス ライブラリ、EF が使用されていることを知ることができる唯一のライブラリ、POCO エンティティは、部分クラスを使用して同じオブジェクトを再宣言する別のファイルを使用してプロジェクト 1 のインターフェイスを実装します...);

3 - ProjectName.BL (クラス ライブラリ、ビジネス ロジック、上記 1 と 2 の 2 つのプロジェクトを参照);

4 - ProjectName.Web (ASP.NET MVC アプリケーション、プレゼンテーション層、2 つのプロジェクト 1 と 3 を参照しますが、2 は参照しません)。

BLとDALの関係に疑問があります。DAL は EF を知っていますが、BL はそうではありません..しかし、それを実装する方法は? つまり、両方のレイヤーでエンティティを表すクラスを作成しました (そして、これは少し重複しているように思えます.. BL で検証やその他のサットフを追加しても)、データベースの値を BL に公開する方法?

私が持っているデフォルトのMVC4ソリューションで

 DbSet<Entity> entity

クエリできること (.Find など) .. BL でそれらをマップする必要があると思います (IQueryable? IEnumerable? Isomething??)

完全に混乱しています..何か助けていただければ幸いです

4

2 に答える 2

3

DAL と EF について話すと、線が少しぼやけることがあります。場合によっては、EF を DAL と見なすことができます。しかし、必要に応じて EF をORMとして簡単に交換できるように、通常、BL が EF に直接アクセスしてより高いレベルに抽象化することはありません。リポジトリ デザイン パターンを使用して、EF をさらに抽象化します。このパターンのもう 1 つの利点は、単体テストが容易になり、依存性注入を使用できることです。Unit of Work Design パターンも使用しますシステム内のトランザクションを処理します。リポジトリと DAL の作業単位も同様です。それとも EF だけですか。それはおそらく議論の余地があり、私はDALを定義しようとすることにもっと関心を持っていることを知っています. MVC 4 プロジェクトで使用することをお勧めするレイヤーは次のとおりです。

MVC 4 アーキテクチャ

アプリケーション層またはドメイン層は BL 層です。サービス層で使用されている概念をこの層に組み込む傾向があるのは、サービス層を分離してもまだ利点が見られないためです。ただし、このレイヤーを一番上に追加するオプションもあります。

于 2013-01-24T14:11:27.103 に答える
1

いいえ、データを取得/更新/追加するために DAL でメソッドを呼び出す必要があるため、ビジネス ロジック レイヤーは DAL について知る必要があります (インターフェイスのみを使用し、POCO クラスを表示することは許可されません)。BL は EF について何も知りません (これは、EF を別のものに置き換えたい場合に備えて、あるべき姿です)。

たとえば、新しいレコードを追加するには:

  • ユーザーが新しい詳細を追加し、フォームを送信します
  • Web プロジェクトは、BL レイヤーで AddItems を呼び出します (インターフェイスであるオブジェクトのリストを使用)

  • BLプロジェクトには、いくつかのビジネスロジック、オブジェクトのリストをDALに渡す前の追加の検証があります(エラー処理もあるかもしれません)

  • DAL はデータベースに項目を作成し、必要に応じてインターフェイスのリストを返します
于 2013-01-24T13:18:32.383 に答える