2009-05-06 10 views
1

生成されたオブジェクトをEntity Frameworkからビジネスオブジェクトとして使用することは悪い習慣ですか?レイヤー間でやりとりするEntity Frameworkオブジェクトの周りにセカンダリラッパーを書く方が良いでしょうか?.NET Entity Framework

たとえば、私の生成したEntity FrameworkオブジェクトEFPersonの1つを受け入れるPOCO Personを作成して、POCO Personオブジェクトを初期化しますか?

+0

EFオブジェクトのシリアル化に問題がある場合は、POCOでラップするのが最善ではありませんか?将来的にはWCFを通じてBizロジックを公開したいと思うかもしれないからです。 – Nate

答えて

2

私はなぜそれが悪い練習になるか分からない。あなたのEFオブジェクトをどのように使用するかによって、扱いにくいかもしれません。

私は、EFオブジェクトにBIZロジックを実装するための部分クラスを用意しています。インタフェースを使用して抽象化レベルを提供しています。

例えば、

public partial class Client : IClient 
{ 
    void DoSomething(); 
} 

// then an EF generated object ... 
public partial class Client 
{ 
// ... 
} 

私の唯一の問題は、オブジェクトのシリアライズです。私の場合、WCFを使用してJSONにシリアル化します。中間のDTOを離散クラス/オブジェクトとして作成したり、匿名型として作成したりすることはできません。

あなたがシリアライズに興味があるなら、ここで私の他の質問を見てい:一部の人々は、ビジネス・オブジェクトにEntity Frameworkのクラスをラップする傾向があるがSerialize Entity Framework objects into JSON

+0

DTOが必要な場合は、すべてのDTOを使い、EFオブジェクトとの間で変換するDTOにいくつかの静的メソッドを持たせることは賢明ではないでしょうか? – Nate

+0

私はしなかった。 1 /あまりにも多くの労力とコードのメンテナンス(コード生成ツールでも)と2/DTOを使用するときは、主にWCF作業のためにそれらを別の目的で使用しています。シンプルシップが勝つ、私のために! –

+0

JavaScript以外の他の「クライアント」では、anon型のDTOは動作しますか? 私の主な用途は、クライアントに関する知識がないWCF経由です。 – Nate

4

を、私は通常それをしないことをお勧め。

これはビジネスロジックとデータアクセスの分離を改善することを理解していますが、これは通常、すべてのエンティティタイプを複製するオーバーヘッドの価値はないと思います。

ORマッパーの目的は何ですか?手作業でオブジェクトをデータベースにマッピングする複雑なデータアクセスレイヤーを必要とせずにビジネスオブジェクトを永続化することです。 Entity Frameworkクラスをラップすると、利便性の半分しか使用できません。

最後に、データアクセスとビジネスロジックの結合は、部分クラスではそれほど厳しくありません。以前は、主要な問題なしにわずか数時間で、Entity FrameworkからLINQへの約30のエンティティを含むプロジェクトを変更しました。

+0

市長...常に問題を引き起こしています... –

+0

:Dそれを修正する...;) –

関連する問題