私は3層アーキテクチャのプログラムを持っています。質問は次のとおりです。
1.データアクセスはEFのレイヤーですか?
2. Presentation LayerからEFで生成されたエンティティを使用する場合は、データアクセスを参照しますが、これは3つのレイヤードアーキテクチャの原則に違反します。エンティティフレームワークと3層アーキテクチャ
答えて
はいEFがデータアクセスレイヤーになります。 EFでは、POCOをサポートするT4テンプレートを使用できます。これらのPOCOを個別のdllに抽出すると、これはすべてのレイヤーからの参照になります。
+1 POCOを使用すると、アーキテクチャーの完全性が維持されることを確実にするために必要なレベルの抽象化が提供されます。の証拠?データアクセスの実装を置き換えても、データコントラクトとしてPOCOを保持することができます。 –
あなたはどのようなアプリケーションを構築していますか? ASP.NET MVC 3アプリケーションを構築する場合は、ビューをプレゼンテーション層にし、モデルがデータアクセス(EFを使用できる)であり、コントローラおよび/またはアクションフィルタにビジネスロジックを含めることができます。シナリオでは、プレゼンテーションレイヤーでEFモデルを使用しますが、引き続き懸念の原理を満たします。
私は、netTcpBindingを使用してwcfサービスを構築しますが、provie Webサービスソフトウェアファクトリを持つアーキテクチャを使用します。サービス実装からのデータアクセス、またはプレゼンテーションレイヤーからの他のアプリケーションからのデータアクセスを参照すると、アーキテクチャ上のエラーはありませんか? – croisharp
私は任意の抽象モデルの重要な目標は依存関係を制限することだと思うので、ServiceContractにSQL文があれば、サービス実装はデータアクセスに「あまりにも依存している」と言います。 EFはそれ自体で抽象化を提供します。私がお勧めするのは、EFコンテキストからサービスを抽象化するリポジトリクラスを作成することです。あなたの質問に答えていますか? –
確かに、削除、編集、GetById、GetAll、Addメソッドを実行するManagerで抽象化を行いましたが、それはビジネスロジックです。つまりCustomer、Producerのように生成されたエンティティを意味します... – croisharp
EFは二つのことを行います - オプション(あなたのためのドメインモデルを生成しますが、一般的に使用される)
1) 2)は、あなたにそのドメインモデルを経由してデータベースを変更/照会する能力を与えます。
これは、ドメインモデルとデータアクセスの間の線がぼやけて見えることがありますが、2つは実際に別々です。
オブジェクトのコンテキストを作成したり、プレゼンテーションに直接質問を書くなどの作業をしていない限り、IMHOでは抽象を壊すことはありません。あなたが参照する必要があるのは唯一のものですSystem.Data.Jethroが提案したルートを使ってドメインモデルを別のプロジェクトに生成しない限り、プレゼンテーションプロジェクト(実際のアーティファクト)のオブジェクト(またはEF dllが何であれ)になります。
マイクロソフトスペインはCodePlexの上のN層アプリケーションのためのかなり良いドキュメント、ガイドとサンプルアプリケーションをリリースし、あなたはここでそれを見ることができます:
http://microsoftnlayerapp.codeplex.com/
あなたは多くの方向とそこに役立つ実装パターンを見つけます。
hth。
3層アーキテクチャの場合。私は、プレゼンテーションレイヤーから直接EFを実行するのではなく、ドメインモデルとデータモデルパターンを使用して抽象化を行うことを検討します。
考えられるのは、様々なCRUDのためにこれらのクラスにアクセスする方法を知っているリポジトリを持つEF POCOクラスを持つデータモデルがあるということです。
ドメインモデルには、クライアントに関連するモデルがあります(さまざまなViewModelsや検証関連のコードを入れることができます)。これはWPFまたはMVC Webアプリケーションです。 これらの2つの間に、ドメインモデルとデータモデルの両方に対話するビジネスがあります。
プレゼンテーションレイヤーは、EF /データレイヤー/リポジトリについて何も知らない。新しいデータフレームワークやデータベースを導入したい場合は、新しいリポジトリクラスとデータモデルクラス(ある種のコードジェネレータを使用する)を作成するだけです。
これにより、コードをユニットテスト可能にすることもできます。
- 1. エンティティフレームワークと3層アーキテクチャのログインフォーム
- 2. エンティティフレームワークを使用する3層アーキテクチャ
- 3. 3層と3層のアーキテクチャ
- 4. 3階層アーキテクチャと2階層アーキテクチャ
- 5. リポジトリパターンと3層アーキテクチャ
- 6. TDDと3層アーキテクチャ
- 7. 3層アーキテクチャとリポジトリパターン
- 8. プレゼンテーション層の3層アーキテクチャ、ioTデバイス?
- 9. 3層アーキテクチャでのビジネス層の使用
- 10. 3層アーキテクチャの正確さ
- 11. Windowsの3層アーキテクチャのフォーム
- 12. C#NHibernateアーキテクチャ、3層アプリケーション
- 13. ソフトウェア設計 - 3層アーキテクチャ
- 14. 3層アーキテクチャのエラー処理
- 15. 3層アーキテクチャのLINQ to SQL
- 16. Javaアーキテクチャ3層オブジェクト設計
- 17. テクニカルアーキテクチャまたは3層アーキテクチャ
- 18. ユースケース図の3層アーキテクチャ
- 19. 3層アーキテクチャの問題
- 20. Winform Appの3層アーキテクチャ
- 21. 3層アーキテクチャとsymfonyフレームワークについて
- 22. MVCと3層アーキテクチャの違い
- 23. WCFを使用した3層アーキテクチャ
- 24. Symfony PHPで3層アーキテクチャを実現
- 25. VB.netでの3層アーキテクチャの開始
- 26. vb.netは、3階層アーキテクチャのエラーメッセージオープン接続
- 27. 3層アーキテクチャでのDTOの使用
- 28. これは3層アーキテクチャですか?
- 29. MVCとN層アーキテクチャ
- 30. エンティティフレームワークをN層アーキテクチャでモックする方法
croisharpプレゼンテーションレイヤーまたはモデル定義(クラス)を要求しているHandlersプロジェクト(ロジック)でEFモデルを参照すると、データアクセスはデータレイヤーに残りますので、心配しないでください! – euther