1

私はこれが何百万回も前に行われたことを知っていますが、私はまだどちらに行くべきか2つの心にあります:

  1. EF - UoW / リポジトリ - サービス - Web または
  2. EF - サービス - Web

DbContextなどをモックできるため、UoW /リポジトリレイヤーは冗長であるようです。これにより、実装が簡単になり、サービスをEFに近づけると、より用途が広いように見えます。

これについて誰か良いアドバイスはありますか?

これに関して私が持っている 1 つの質問は、Ninject を使用して接続することです。Web 側でサービスに DbContext を挿入する場合は、EF への参照が必要です。これは間違っているようです。

kernel.Bind<FunkySoftwareContext>().ToSelf().InRequestScope();

これに対抗する方法はありますか?

4

3 に答える 3

2

正しい抽象化が必要かどうかによって異なります。

サービス層は、データベース エンティティを公開しないでください。適切なビジネス/ドメイン モデルを公開する必要があります。db エンティティとまったく同じように見える場合とそうでない場合があります。

それがリポジトリパターンの良いところです。ビジネス モデル表現を取得し、データベース/orm が使用できるものに変換します (逆も同様です)。

しかし、エンティティ フレームワークから読み込まれたオブジェクトがドメイン/ビジネス モデルの完全な表現であると判断した場合は、リポジトリをスキップしてください。

私はそれについてブログエントリをここに書きました: http://blog.gauffin.org/2012/06/protect-your-data/

于 2012-08-24T10:10:59.323 に答える
1

DbContextなどをモックできるため、UoW /リポジトリレイヤーは冗長であるように見えます。これにより、実装が単純になり、サービスをEFに近づけることがより用途が広いように見えます。

リポジトリパターンが使いすぎていることに気付いたとしても、EF自体はDbContextを使用してUoWを実装し、DbSetを使用してリポジトリを実装します。したがって、アーキテクチャにUoW/Repositoryを追加する必要はありません。

これについてさらにアドバイスが必要な場合は、ここここにあります。またはAyendeからのアドバイス:ここここ

于 2012-08-25T07:49:30.180 に答える
1

(これはコメントのつもりでしたが、大きくなりすぎました!) 質問が2つある場合は、2つの質問をする必要があります。これが Ninject の質問である場合、私はそれに答えますが、タイトルはそうではないことを示唆しています。

ninject 側では、Where should I do Injection with Ninject 2+ (およびモジュールをどのように配置すればよいですか?)を参照してください (複製へのリンクをたどる)。

要約すると、単一のコンポジション ルートがバインディング プロセスを管理するのは正しいため、最終的には何か(@jgauffin の回答を参照) になりInRequestScope、それが CR にあると言うのに適切な場所になります。

他のアプローチ (すべての UOW MVC リポジトリの InRequestScope Q & As を読んでください) は、ビジネス レイヤー サービス クラスをコントローラー クラスに注入することです。

  1. その下の一部のタートルがDBContextIDisposableを使用している場合は、それを管理するためのより良い方法である可能性があります。
  2. (より理想的には) コントローラーが UOW を明示的にコミット (および失敗に対処) できるようにします (フィルターなどによるキャッチオール処理を完全に排除するわけではありません) Controller が DBContext と直接やり取りすべきだと言っているわけではありません。
于 2012-08-25T07:33:02.777 に答える