3

私はいくつかのアドバイスなしでは解決できないという問題があります。私はASP.NET MVCアプリケーションを開発しており、ADO.NET EFを使用してデータベースに接続しています。私の問題は、私のアプリのビジネスロジックがEFによって作成されたエンティティを使用する必要があるかどうか、あるいはもう1つの抽象レイヤーを作成してビジネスロジックオブジェクトからEFエンティティを分離する必要があるかどうかを知ることができないことです。または、私は完全に間違っているかもしれませんし、別の方法で行う必要がありますか?どうやって?どのソリューションがベストプラクティスですか?ASP.NET MVCとADO.NETエンティティフレームワーク

答えて

2

これはアプリケーション、その適用範囲、およびその要件によって決まります。レイヤーのためだけに抽象レイヤーを導入するということは、複雑さと間接性を導入することを意味します。階層化されたアーキテクチャの過度のために、というラザニアソフトウェアという用語が、現在、悪名高いスパゲッティソフトウェアの代わりに導入されています。

これを明確にするために、私は抽象化層に対して提案していません。それらを単に使用することは、特定の要件に大きく依存します。

私は簡単なアーキテクチャから始め、必要に応じてテスト可能性と保守性を確保するためにレイヤーを追加します。現在のバージョンEntity Frameworkの(これを書いている時点では4.1)POCOSで作業を可能にし、DbContextはかなりの作業パターンのリポジトリユニットに似ています。これらの機能は、ほとんどの場合、開始には十分な場合があります。

+0

(EFはないものの、舞台裏であなたのPOCOさんのプロキシされたバージョンを作成し、)あなたのPOCOちょうど実体はなく、EFオブジェクトであることをごanswearのおかげです。あなたの記事はちょうど私を蹴って、 "あなたの目を大きく開いている"と言った:) – TrN

+0

助けて嬉しい!私は、分析麻痺でいかに素早く立ち往生できるか自分自身を知っています... –

0

私は、このような状況をDataクラスとModelクラス用に別々のプロジェクトにすることで対応しました。

データクラスは、ADO.netモデルで生成されたクラスで、次にリポジトリパターンを使用してADO.netコンテキストに接続し、データクラスを取得し、http://automapper.codeplex.com/などのデータクラスをマップすることができますビジネスモデルに

これは、モデルでRequired、RegexなどのMVC検証を使用し、Dataクラスを使いこなすのを避け、モデルの回りを渡すだけです。

0

一般に、ドメインモデルとサービスレイヤの両方にビジネスロジックを配置するのが最適です。ドメインモデルのロジックは、テストが容易なので望ましいですが、すべてのロジックがこのように簡単に実装されるわけではありません。例えば。操作に多数のドメインオブジェクトが含まれている場合、パフォーマンスの影響やその他の問題なしに、そのオブジェクトの1つに適切に配置することはできません。

0

これはPOCOが出場する場所です。データモデルから汎用POCOを生成し、ビジネスレイヤーで使用することができます。 EFはPOCOを作成して追跡します。

ここでの考え方は

関連する問題