私はいくつかのアドバイスなしでは解決できないという問題があります。私はASP.NET MVCアプリケーションを開発しており、ADO.NET EFを使用してデータベースに接続しています。私の問題は、私のアプリのビジネスロジックがEFによって作成されたエンティティを使用する必要があるかどうか、あるいはもう1つの抽象レイヤーを作成してビジネスロジックオブジェクトからEFエンティティを分離する必要があるかどうかを知ることができないことです。または、私は完全に間違っているかもしれませんし、別の方法で行う必要がありますか?どうやって?どのソリューションがベストプラクティスですか?ASP.NET MVCとADO.NETエンティティフレームワーク
答えて
これはアプリケーション、その適用範囲、およびその要件によって決まります。レイヤーのためだけに抽象レイヤーを導入するということは、複雑さと間接性を導入することを意味します。階層化されたアーキテクチャの過度のために、というラザニアソフトウェアという用語が、現在、悪名高いスパゲッティソフトウェアの代わりに導入されています。
これを明確にするために、私は抽象化層に対して提案していません。それらを単に使用することは、特定の要件に大きく依存します。
私は簡単なアーキテクチャから始め、必要に応じてテスト可能性と保守性を確保するためにレイヤーを追加します。現在のバージョンEntity Frameworkの(これを書いている時点では4.1)POCOSで作業を可能にし、DbContext
はかなりの作業パターンのリポジトリとユニットに似ています。これらの機能は、ほとんどの場合、開始には十分な場合があります。
私は、このような状況をDataクラスとModelクラス用に別々のプロジェクトにすることで対応しました。
データクラスは、ADO.netモデルで生成されたクラスで、次にリポジトリパターンを使用してADO.netコンテキストに接続し、データクラスを取得し、http://automapper.codeplex.com/などのデータクラスをマップすることができますビジネスモデルに
これは、モデルでRequired、RegexなどのMVC検証を使用し、Dataクラスを使いこなすのを避け、モデルの回りを渡すだけです。
一般に、ドメインモデルとサービスレイヤの両方にビジネスロジックを配置するのが最適です。ドメインモデルのロジックは、テストが容易なので望ましいですが、すべてのロジックがこのように簡単に実装されるわけではありません。例えば。操作に多数のドメインオブジェクトが含まれている場合、パフォーマンスの影響やその他の問題なしに、そのオブジェクトの1つに適切に配置することはできません。
これはPOCOが出場する場所です。データモデルから汎用POCOを生成し、ビジネスレイヤーで使用することができます。 EFはPOCOを作成して追跡します。
ここでの考え方は
- 1. 厳密に型付けされたASP.NET MVCとADO.NETエンティティフレームワーク
- 2. MVC(ASP.NET ID)カスタムサインインステータスとエンティティフレームワーク
- 3. weborbとwcfサービスライブラリとado.netエンティティフレームワーク
- 4. ASP.NET MVCプロジェクトのADO.NETデータサービス
- 5. ado.netエンティティフレームワーク削除行
- 6. ASP.NET MVCエンティティフレームワーク:データ注釈
- 7. asp.net MVC 5エンティティフレームワーク - DropDownListForトリムスペース?
- 8. ASP.NET MVCエンティティフレームワークの代替
- 9. Classic ADO.NetでASP.Net MVCを使用する
- 10. ASP.NET MVCコア1.0のADO.NETエンティティデータモデル(.edmx)
- 11. エンティティフレームワークと古いADO.Netを併用する
- 12. エンティティフレームワークまたはado.netのweb api
- 13. asp.netとado.netのキャッシュ
- 14. ASP.NET MVC 2とADO.NET EntityCollectionsとのモデルバインディングの使用
- 15. ユニットテストMVC 3とエンティティフレームワーク
- 16. サブソニックとADO.NETエンティティフレームワークの比較が速いもの
- 17. ADO.Net with ASP.Net
- 18. ado.netエンティティフレームワークでwhere句のcountを使用
- 19. エンティティフレームワークとMVCのストアドプロシージャ3
- 20. ado.netデータベースをAsp.net MVC 5に接続する方法
- 21. ASP.Netエンティティフレームワークと外部キー
- 22. ADO.NETエンティティフレームワークと単体テストの実際の経験
- 23. ADO.NETエンティティフレームワークとNHibernate - いつ他のものを使用するか
- 24. Asp.Net MVCとAsp.Net両コアMVC
- 25. ASP.NET MVCとAngularjsとASP.NET MVCとReactjs
- 26. ADO.NETとAutoMapperを使用したASP.NET CORE
- 27. mvcエンティティフレームワーク選択ケース
- 28. Spring MVCとASP.NET(MVC?)
- 29. Windows Azureでエンティティフレームワークを使用したAsp.net mvc認証
- 30. asp.net mvc - エンティティフレームワークで仮想アイテムを注文する方法
(EFはないものの、舞台裏であなたのPOCOさんのプロキシされたバージョンを作成し、)あなたのPOCOちょうど実体はなく、EFオブジェクトであることをごanswearのおかげです。あなたの記事はちょうど私を蹴って、 "あなたの目を大きく開いている"と言った:) – TrN
助けて嬉しい!私は、分析麻痺でいかに素早く立ち往生できるか自分自身を知っています... –