質問
3 層アーキテクチャの ASP.NET アプリがあります。
プレゼンテーション層:ASP.NET
ビジネス層:C#ライブラリ。
データアクセス層:C# ライブラリを使用
ADO.Net Entity Framework オブジェクト。
ビジネス層の一部のメソッドは ADO.NET エンティティ オブジェクトを返しますが、データ アクセス層がプレゼンテーション層に表示されないため、それはできません。
私の質問は次のとおりです。デザイン ビューで、プレゼンテーション レイヤーでエンティティ オブジェクトを公開するのは正しいですか?Data Layer ライブラリを ASP.NET アプリにリンクするだけでよいと思います。
ありがとう!
解決
私はあなたのビューオブジェクト...またはデータ転送オブジェクト(DTO)の概念を調べることを示唆しています。あなたはあなたのエンティティのうち、ビューの特定のドメインオブジェクトを作成しますAutoMapperまたは類似のようなツールを使用して検討するかもしれません。一般的に、あなたはその作業を実行するために、エンティティの存在を必要とする画面を有することができます。しかし、より多くの場合より、あなたはいくつかの異なるエンティティを渡す必要があります。この場合、あなたは、これらのエンティティのすべてが含まれている1つのDTOを作成したほうが良いです。これにより、あなたのプレゼンテーション層とビジネス層の間の分離層を追加しています。しばしばあなたのエンティティは、あなたのプレゼンテーション層に公開するかもしれないより多くの電力を持っています。およびその逆。頻繁にあなたのビジネス層にフラグを立て、いくつかの検証に基づいてプレゼンテーション層に外にいくつかのUIのメッセージを取得する必要があるかもしれません。むしろそれは(あなたの完全なエンティティに渡すことで)必要以上にあなたのUIをより複雑にするよりも、あなただけのUIは、DTOの形で必要なものを渡すことができます。また、プレゼンテーション層に特有のものを気にするあなたのビジネスオブジェクトの必要性は決してありません。私はあなたがにまでさかのぼるデータアクセス層として何にも直接データバインドではないことを示唆しています。技術的にはあなたのプレゼンテーション層は、ビジネス層についてできるだけ少しを知っている必要があります。 MVPやMVCの場合、これは、この追加の分離の方法により、フロントエンドとバックエンドを切り離すことによって達成することは非常に簡単です!
他のヒント
エンティティ オブジェクトをプレゼンテーション層で使用および消費できるようにすることが絶対に望ましいです。すべての仕事はそのためにあるのです。
- オブジェクトのコレクションをグリッド/リストビュー/ドロップダウンにバインドする
- 単一のオブジェクトをスプラッシュする (つまり、顧客) をフォームに入力して読み取り/更新/削除します
これにより、あなたの生活がはるかに楽になります。それ以外の場合は、プレゼンテーション層とビジネス層の間で、string の後の int の後の double の後に string を渡す必要があります。
これらは、エンティティ オブジェクトである場合もあれば、エンティティ オブジェクトからハイドレートされた独自の POCO オブジェクトである場合もあります。
私は、あなた方のエンティティは DAL とは別の独自の議会に所属すべきだとさえ言います。
いいえ、そうではありません。そのための最良の方法は、データ クラスを動作から分離し、プレゼンテーション レベルでデータ クラスのみを参照することです。WCF を使用すると私が考える良いアプローチは、これを参照してください。 リンク