3

EF4でサービスレイヤー/リポジトリ/作業単位パターンを使用してMVCアプリを構築しています。

私は論理について少し混乱しています。システムを切り離すことがポイントであることは知っていますが、少し混乱しています。

そのため、MVCコントローラーはサービスを呼び出してビューモデルを埋めます。では、MVCアプリがサービスレイヤーに結合されていると言っても安全ですか?

次に、サービスレイヤーはリポジトリを呼び出して、オブジェクトを取得して永続化します。それなら、サービスレイヤーはリポジトリに依存していると言っても安全ですか?

リポジトリはEF4を利用してデータを取得してSQLServerに永続化するため、リポジトリはEF4に依存し、EF4はSQLServerに依存していると思います。

作業単位はどこに収まりますか。

例はありますか?ありがとう!!

4

3 に答える 3

4

作業単位を下位層のどこかに隠すことから始めましたが、それを行うのは間違った方法です。いくつかの経験の後、私の意見は次のとおりです。

  • モノリティックアプリケーションの場合、UnitOfWorkはコントローラーおよび下位層からアクセスできる必要があります。
  • 分散アプリケーション(UIとBLが異なるサーバー上にある)の場合、UnitOfWorkは、ビジネスレイヤーファサード(リモート呼び出しのサービスレイヤー)および下位レイヤーからアクセスできる必要があります。

その理由は、言及されたレイヤーが「ビジネストランザクション」とは何か=現在の作業単位とは何かを定義するためです。このレイヤーだけが、データストアに変更をコミットするタイミングを認識しています。このようにすることで、サービスの構成(コードの再利用)が可能になります。私はここここで同様の質問について話し合いました。

于 2011-03-02T10:42:42.047 に答える
3

サム、

Julie LermanはDNRテレビで優れたスクリーンキャストを行い、これについて話しました。チャンネル9には、ここでEFだけのリポジトリの作成とテストに関する別のスクリーンキャストもあります。

これらに隣接する一般的なことは、Nhibernateで作業単位の抽象化を作成することです。これはSessionになります。EFでは、コンテキストになり、そのセッションまたはコンテキストをリポジトリに渡します。テストの一部として、接続を偽造して、辞書のリスト。

これらの助けを願っています。

イアン

于 2011-03-02T07:50:30.543 に答える
1

レイヤリングに関する仮定は正しいです。EFコンテキストは作業単位です。通常、これをインターフェイスを介して抽象化し、コンストラクターがCRUD操作のために各リポジトリに挿入します。もう1つのアプローチは、UoWインターフェースでリポジトリーを公開することです(私は前者を好みます)。どちらの方法でも、各レイヤーの単体テストが簡単になります。サービスレイヤー内からUnitOfWorkを1回呼び出すだけで、すべてのリポジトリ間ですべての変更が保持されます。

これは、MSDNに関する優れた記事で、単体テストの観点からUoWを調べていますが、リポジトリについても説明しています。MVCコントローラーからリポジトリーを参照する場合は、別の中間サービスレイヤーがあります。

于 2011-03-02T08:03:14.780 に答える