1. ホーム
  2. c#

[解決済み】平凡なCLRオブジェクトとデータ転送オブジェクトの比較

2022-04-17 21:29:24

質問

POCO = Plain Old CLR (or better: Class) Object (プレーンオールドCLRオブジェクト)

DTO = データ転送オブジェクト

この中で ポスト という違いがありますが、正直なところ、私が読んだブログでは、POCOをDTOの定義で説明しているものがほとんどでした。DTOは、アプリケーションの各レイヤー間でデータを移動するために使用される単純なデータコンテナです。

POCOとDTOは同じものですか?

どのように解決するのですか?

POCOは、OOPのルールに従います。 それは状態を持つべきです(しかし、持つ必要はありません)。 ビヘイビアがあります。 POCOはMartin Fowlerの造語であるPOJOに由来する[ ]。 逸話はこちら ]. 彼は、フレームワークの重いEJB実装を拒否するために、よりセクシーにする方法としてPOJOという言葉を使いました。 POCOは.Netでも同じ文脈で使われるはずです。 フレームワークにオブジェクトの設計を決めさせてはいけません。

DTOは状態を転送することだけが目的であり、動作は持たないほうがよい。 Martin Fowlerの DTOの説明 は、このパターンの使用例である。

ここが違うんです。 POCOはプログラミングのアプローチを記述する (古き良き時代のオブジェクト指向プログラミング)であるのに対し DTOはパターン オブジェクトを使用してデータを転送するために使用されます。

POCOをDTOのように扱うことはできますが、POCOをDTOのように扱うと、POCOがDTOのように扱われる危険性があります。 貧弱なドメインモデル ということです。 さらに、DTOはデータを転送するために設計されるべきであり、ビジネスドメインの真の構造を表現するためではないので、構造上のミスマッチがあります。 その結果、DTOは実際のドメインよりも平坦になりがちです。

それなりに複雑なドメインでは、ドメインPOCOを個別に作成し、それをDTOに変換した方が良い場合がほとんどです。 DDD (ドメイン駆動設計) は、以下のように定義しています。 アンチコラプションレイヤー (別のリンク こちら が、一番良いのは 本を買う )であり、棲み分けを明確にした良い構成だと思います。