2009-05-27 10 views
13

ASP.NETアプリケーションでは、エンティティフレームワークを使用してデータアクセスレイヤーを実装したいので、ORMツールとして使用できます。しかし、私は、アプリケーションの残りの部分が私がこれを使用しているか、何らかのエンティティフレームワーク固有のものによって汚染されていることを気にしたくないです。エンティティフレームワークをデータアクセスレイヤーとして使用

データアクセス層でエンティティフレームワークを排他的に使用している人はいないようですので、この/経験者のオンラインの例を見たいと思っています。

+0

StackoverflowのDAL:http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/ –

答えて

4

にあなたを使用して同じ方法で、エンティティフレームワークを実装することができます可能性抽象ScottGuのようなリポジトリのパターンのようなものを使用してエンティティフレームワークはでLINQのでありませんNerdDinnerシリーズ。

http://nerddinnerbook.s3.amazonaws.com/Part3.htm

2

を助けを期待してアップに働いてきたこのDDD触発されたアーキテクチャ私の最後の2つのプロジェクトのデータアクセスとして。これらは、数百のテーブルを持つ大規模な(少なくとも私のために)プロジェクトで、5〜15人の開発者が1年以上続いています。

両方のプロジェクトでは、サービスレイヤーにWCFインターフェイスがあります。 WCFコントラクトでEntity Frameworkオブジェクトを使用することは望ましくありませんでした。したがって、データ転送オブジェクトを作成し、DTOとEntity Frameworkオブジェクトを対応付けました。

これにより、依存関係が解消され、契約ができるだけ安定した状態に保たれますが、余分な作業が必要になります。

私はこのようにやっていますか、次のバージョンではPOCOオブジェクトを使用しています。

2

EFまたは他のORM(つまり、NHibernate)は、データアクセスレイヤを置き換えません。むしろ、ORMは、DALからデータソースまでの抽象レイヤーです。

EFがDALと離れていると騙されてはいけません。 EFは単なる別のデータソースフレームワークです。ただし、ベストプラクティスでは、一般的なDALですべてのアクセス(読み取り/書き込み)を抽象化し、集中化したいと考えています。

私が話していることの完全な例です。ユースケースの1つで特定のユーザーを削除する必要があるとします。ただし、ユーザーを削除するときに、孤立したレコードを避けるために、削除されたユーザーに関連付けられた他のレコードを削除することができます(正直なところ、これにストアドプロシージャを使用します)。今では、このユースケースは、このユースケースに非常に特有のBOに固執しており、ユーザーがユースケース全体の一部に過ぎないので削除します。

ある時点で、関連する別のユースケースを組み込み、ユーザーを削除するように求められる開発者がいます。開発者はいくつかのことをするかもしれません。 1)ユーザーを削除するが、そのユーザーに関連付けられたレコードを削除することを忘れた新しいユースケースを作成する可能性があります。 2)以前のユースケースに気付いたことがあるかもしれませんが、ユースケースのために一般化しないと直接使用することはできないため、ユースケースとその関連レコードを適切に削除するユースケースの一部をユースケースにコピーすることにしました。ここでは、実際に同じことをするコードを複製して、ユーザーを削除します。 Yuk!さて、これをDALに「削除するユーザー」を入れています。ユーザーヘルパークラス、あなたはこの悪い設計の練習を避けます。

とにかく、EFに関する素晴らしい点は、私が手動で作成したビジネスエンティティの数を減らし、アプリケーションレベルからデータストアレベルで見られるものとは異なるビューを提供することです。

関連する問題