web-dev-qa-db-ja.com

エンティティフレームワークとPOCOとは

POCOを使用する利点は何ですか?永続性無知の意味がわかりません。これはどういう意味ですか? pocoオブジェクトがSaveなどを公開できないことは?話題がたくさんあるこのPOCOに頭を包むことはできません。

EFで生成されたエンティティとPOCOの違いは何ですか?

32
pdiddy

POCOは、誰に尋ねるかに応じて、「Plain Old C#Object」または「Plain Old CLR Object」の略です。フレームワークまたはAPIがPOCOで動作することを示している場合、それは、オブジェクトに特定の基本クラスから継承させることなく、オブジェクトモデル 慣用的に を定義できることを意味します。一般的に言えば、POCOで動作するフレームワークを使用すると、クラスを正しく動作させるための要件が​​少なくなるため、クラスの設計と実装をより自由に制御できます。

永続性の無知は、ビジネスロジックレイヤー以上で動作するコード内のすべてのものが、データベースの実際の設計、実行しているデータベースエンジン、またはオブジェクトを取得または永続化する方法またはタイミングについて、何も知らないことを意味しますデータベースに。 MEFの場合、永続性の無知はPOCOで作業し、LINQを使用してクエリを実行することで達成されます(つまり、ユーザーが必要なオブジェクトを取得するためにSQLクエリを作成する必要はありません)。

これは未解決の問題ですが、ほとんどの状況で、ドメインオブジェクト(またはビジネスオブジェクト-いずれにしても、上記のPOCOの)は永続化ロジックを無視する必要があることは一般的に同意されています。つまり、MyBusinessObject.Save()を呼び出す代わりに、IOマネージャーまたはアダプタークラスがあり、Manager.Save(MyBusinessObject)を呼び出します。このようにして、永続性の公開を回避します。ビジネスオブジェクトのセマンティクス-こうすることで、懸念をより適切に分離できます。

45
Dathan

POCO =プレーンな古いCLRオブジェクト。

プレーンな古いCLR(つまり、C#またはVB)オブジェクトは、C#またはVBプログラムを書いている間ずっと話すことができ、次のような難解なデータベース言語について心配する必要がないことを意味します

UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH

EF生成エンティティ==データベースに(間接的に)接続されたPOCO。

4
Robert Harvey

POCOクラスは、フレームワーク固有の基本クラスに依存しないクラスです。他の通常の.netクラスと同様に、「プレーンオールドCLRオブジェクト」と呼ばれています。これらのPOCOエンティティ(永続性を無視するオブジェクトとも呼ばれます)は、EntityObject派生エンティティと同じLINQクエリのほとんどをサポートしています。

1
KADEM Mohammed

POCO =プレーンな古いCLRオブジェクト

POCOの利点:

テクノロジー不可知論は至福です:この概念は通常、PI(持続性無知)を中心に展開していますが、それだけではありません。永続性の無視は、フレームワーク(通常はORM)が強制する永続性関連のコード制約をエンティティからクリアする必要があることを意味します。これは、例えばこれらの属性がドメインの一部ではないが、一部のフレームワークがそれらをそこに存在させたいという理由だけで存在する属性レベルのマッピングがある場合、ドメインは永続性を無視できません。 サイダーはここに言った

0
Mohammadreza