2010-12-14 16 views
0

私は3つのプロジェクトで構成されるMVC Webアプリケーションを構築しています。 1つはGUI用、もう1つはBusinessLogic用、もう1つはデータアクセス用です。ASP.NET MVC - GUIのDALから依存関係を削除

私のデータアクセスのために私はEFによって生成されたファイルを持っています。したがって私は "Customer"という名前の生成されたクラスを持っています。このクラスの検証属性を作成するには、MetaDataTypeを作成する必要があります(同じ名前空間で実行する必要があるため、DALレイヤーで行う必要があります)。これにより、GUIからデータアクセスレイヤーを参照します私のGUIはDALとBLの両方の層を参照しているので、プロジェクトを分割することを全面的に諦めてしまいます。どうにかして、私はGUIとDALレイヤーを別々にしておくことができますが、[必須]などのバリデーション属性を使用することはできますか?

ありがとうございます。

答えて

2

.NET 4(EF 2)を使用している場合、プロジェクト間で共有できる別のクラスライブラリにPOCOエンティティを生成できます。それはDALへの依存を必要としません。別のプロジェクトに移動する方法を含む

ASP.Net Layered app - Share Entity Data Model amongst layers

特に3 POCOテンプレート、: - 彼らは私のBL層に渡され、に「ラップ」する必要がありますhttp://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-poco-templates-for-the-entity-framework.aspx

+0

私の答えでコメントしたように、これは実用的かもしれませんが、永続性の無知の概念に完全に反しています。これはUIをドメインモデルと組み合わせるためです。しかし、誰もDDDプログラマでなければならない。 – rsenna

+0

@rsenna:私が間違っていない限り、あなたはまだ永続性の無知を持っています。それがPOCOを使用する全体のポイントです。データベース呼び出しを処理するリポジトリパターンなどの他の抽象化がある場合は、POCOエンティティを維持しながら、データベースバックエンド全体を置き換えることができます。確かに、POCOエンティティはもはやEFによって生成されませんが、EFに依存することはないので問題にはなりません。 –

+0

私が見ている問題は、技術的ではなく建築的なものです.DALとUIの両方で**同じ**エンティティを共有しています。ですからプレゼンテーションは永続性のために使用されるものと同じエンティティに結合されています - そして、私はこれが "無知"と呼ばれるとは思わないしかし、もう一度、私はそれを前にやって、シンプルなシステムやCRUD指向のためにやり直しています。それ以外は、UI用のビューモデルと、ビジネスとデータアクセスレイヤのドメインエンティティを使用します。 – rsenna

2

これは、ViewModelsです。しかし、それはあなたがビューコントローラの通信のための新しいDTOのセットを持っていることを意味します...あなたの意見は実際のドメインモデルについて何も知ってはならないので、IMHOは良いことです。

あなたの意見をモデルとコミュニケーションさせるためのすべての異なる方法については、thisをご覧ください。

+0

もの「のviewmodels」私の以前の回答を参照してください。 EFはクラスを生成しましたか? – ebb

+0

いいえ、viewmodelsはビューとコントローラによってのみ表示されます。これらは** BLまたはDALの一部ではありません**。 **ユーザー**が見ているようにそれらをデータと考えてください。おそらく、同じデータがドメインモデルに保持される方法とはまったく異なります。 – rsenna

+0

自分のビューモデルの1つをBLに渡したい場合、どうすればよいですか? - あるいは、あなたは通常、クラスをパラメータとして使用しませんか? – ebb

関連する問題