2009-05-11 4 views
8

Robがそれを実行する方法に従って、私はLinq to SQLウィザードによって生成されたクラスを持っていて、次にPOCOであるクラスのコピーを持っています。私のリポジトリでは、私は、SQLモデルにこれらPOCOSではなく、LINQのを返す:EFエンティティよりもレポジトリからPOCOオブジェクトを返す賛否両論は何ですか?

 
return from c in DataContext.Customer 
     where c.ID == id 
     select new MyPocoModels.Customer { ID = c.ID, Name = c.Name } 

私はこの利点は、POCOモデルはので、これは私のコードは、より多くのテスト可能になります簡単にインスタンス化することができるということであることを理解しています。

私は今、LinqからEntity FrameworkにSQLへ移行しています。私はEFの本の半分ほどです。私はEFエンティティではなく私のリポジトリからPOCOを返すことで失うことになるだろうということはたくさんあるようです。

私は単位テストをまだ受け入れていないので、これらの余分なPOCOを作成してコードを記述するのに多くの時間を費やしているように感じます。私はまた、私のオブジェクトを追跡することができないことによって、EFの多くの利点を失うことになります。

誰にも、このORM /リポジトリのすべてに関連するnewbのアドバイスはありますか? DDDのような例えば:

アンソニー

+0

Rob ConeryのStorefrontシリーズに従っていたことを述べたいと思った私の記事の最初の行を忘れて、私の小規模なプロジェクトで彼のリポジトリパターンを使い始めました。 – littlecharva

答えて

6

人々は(LINQ to SQLなどの)自動生成オブジェクトが気に入らないもう一つの理由は、組み込みの「魔法」のためです。

通常、このマジックは目に見えませんが、気付かれることはありませんが、これらのオブジェクトの1つをシリアル化してからデシリアライズする場合(Webサービスを使用する場合など)、データソースへの内部接続が切断され、特別なハックを使用して「魔法を戻す」必要があります。

POCOを使用すると、これらの種類のことを心配する必要はなく、データレイヤとサービスレイヤを適切に分離することができます。欠点はもちろん、退屈なPOCO - >マジックオブジェクトとマジックオブジェクト - > POCO変換コードをたくさん書かなければならないことです。しかし、最終的には、大規模なプロジェクトや複雑なプロジェクトの場合、通常はそれが価値があると思います。

4

主な理由は、多くの人々が特定の考え方を持つ彼らのモデルを開発したいということです。ステータス(列挙型ではなく)などの特定のパターン(SpecまたはStateなど)を使用したい場合や、インスタンス化のためにFactoryを使用する場合があります。

オブジェクトが複雑になったときにオブジェクトとしてテーブルを使用しようとすると、オブジェクト指向が壊れます。シンプルなサイトは正常に動作しますが、大きな大きなものになれば醜いものになります。

いつものように、あなたのプロジェクトが変わると思います。

2

私の経験はあなたには、いくつかの複雑なクエリを足す起動したとき.INCLUDE方法は価値がないということであり、あなたが自分自身を見つけるでしょう、次のいずれか

a)に必要なデータや B)の悪用を取得するには、クエリの多くを足します1つのクエリでデータを読み込み、そのデータをエンティティに渡すだけのコードをたくさん書くことができます。

POCOは、IMHOに行く方法です。

関連する問題