プロジェクトでLayered ArchitectureとEF、RepositoryとUoW Patternを使用したいと思います。DBContext、Repository、およびUnitOfWorkはどの層に配置する必要がありますか?
DBContext、Repository、およびUnitOfWorkはどのレイヤーにする必要がありますか?
DALまたはBLL?
プロジェクトでLayered ArchitectureとEF、RepositoryとUoW Patternを使用したいと思います。DBContext、Repository、およびUnitOfWorkはどの層に配置する必要がありますか?
DBContext、Repository、およびUnitOfWorkはどのレイヤーにする必要がありますか?
DALまたはBLL?
DALはData Access Layerの頭字語です。 DbContext、リポジトリ、作業単位は、データの操作に関係しているため、間違いなくDALに配置する必要があります。
この件に関しては、多くの意見がありますので、 "Should"はおそらく正しい単語ではありません。 あなたが本のうち、これらのパターンを実装する場合、私はASP.NETの連中から、このリンクをチェックアウトします: https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
しかし、私は実際にこのようにそれを層に開始しました:
コントローラ/ロジック< - ビジネスロジックと境界オブジェクトが作成され、変換される場所。
リポジトリ< - 貯蔵機構の実際の実装が存在する - 持続性およびトランスエンティティおよびクエリに関連するロジックが
ストア<オブジェクト。これはインタフェースの背後に抽象化されています。
この方法は、ビジネスロジックとリポジトリロジックの両方がテスト可能であり、デカップリングされており、永続性の欠如または欠如のメカニズムを自由に使用できることを利用しています。アプリケーションの残りの部分が何も分かっていなければ
これは他のパターンと同様にオフコースですが、これは私がこのことをとることです。
DbContextは、DALの境界を超えることはありません。リポジトリまたは作業単位をそこに置く場合は、自由で、詳細や依存関係を上向きに漏らさないようにしてください。 DbContextは、できる限りきれいに保つために、可能な限り狭い範囲にスコープする必要があります。そのコンテキストがどこにあるのかわからない...保護を身につけてください!しかし、冗談はさておき、非同期、マルチスレッド、マルチノード、大規模なアプリケーションを持っていれば、これらのDbContextをどこを通しても、一般的な並行性とデータ競合の問題になります。
私が気に入っているのは、コントローラに注入するInMemoryストアから始めることです。そのストアが複数のエンティティにサービスを提供し、永続ロジックがますます複雑になるとすぐに、リポジトリを上にしてストアにリファクタリングします。私のテストがすべて合格し、私が望むように動作するようになると、私はそのストアのデータベースまたはファイルシステムベースの実装を作成し始めます。
また、これはかなり一般的な質問であり、「真の」回答はほとんどなく、多くの意見しかないので、私の意見もここにあります。
これに関する多くの意見は有効で、長所と短所が異なります。重要な点は、必要な強みと弱みをどのように処理するかを理解することです。
リポジトリにはDbSet<T>
オブジェクトへの参照が必要です.1つ以上のリポジトリから追加、更新、または削除した後はUnitOfWork
からSaveChanges
を呼び出す必要があります。したがって、作業単位の実装にDbContext
を配置する必要があります。
ほとんどの場合、私は考えがありました。なぜこれを明らかにするためにMicrosoft ASP.Netが提供していますか? –