質問
POCO=Plain Old CLR(またはより:クラスオブジェクト
DTO=データ転送オブジェクト
この ポスト 差がありますが、正直の多くはブログを読んだ記述POCOをDTOが定義されています:DTOsシンプルデータコンテナ使用のための移動データ、層と層の間にアプリケーションの一部。
はPOCOとDTO同じこんなことをしたのだろう。
解決
A POCO以下のルールをOOP.のでもない状態 や ます。POCOからPOJO、新造によるマルタンファウラー[こちらの逸話].その中でPOJOとして、よりセクシーを拒否する枠組みの重EJBます。POCOを採用すべきである、同じコンテキストです。います。んの枠組みそのおのオブジェクトのデザイン。
は、別の目的での転送状態で、なくてはならない。参照マルタンファウラーの 説明DTO その一例として、このパターンです。
この違い: POCOつのアプローチプログラミング (古き良き昔ながらのオブジェクト指向プログラミング) DTOパターン に使用される"データ"を用います。
ることができますしながら、治療POCOsのようにDTOsきのリスクの作成 貧血のドメインモデル 場合はこの限りではありません.また、あのミスマッチ構造からDTOsるように設計されるべきデータ移行しないような、構造のビジネスインこのことDTOs傾向にあるフラットより実際のドメイン.
ドメインの合理的な複雑さいにほとんどないほうがよいの作成を別のドメインPOCOs翻訳しDTOs.DDD(ドメイン駆動型のデザイン)を定義します 腐敗防止層 (他のリンク こちらの, があ 購入のである良好構造の分離を明確です。
他のヒント
これは、私はすでに私のブログの記事で私の立場を述べたので、私が貢献するのは、おそらく冗長だが、アップ和事のその記事の種類の最後の段落ます:
だから、結論では、POCOを愛することを学び、あなたはそれがDTOと同じものであることについていかなる誤った情報を広めないことを確認してください。 DTOは、アプリケーションの層との間でデータを移動させるために使用される単純なデータコンテナです。 POCOSは、彼らが無知な持続性(なしgetまたはメソッドを保存)されている1つの要件との本格的なビジネス・オブジェクトです。あなたはまだジミーニルソンの本をチェックアウトしていない場合は最後に、あなたの地元の大学・スタックからそれを拾います。これは、C#の例を持っており、それは素晴らしい読み取ります。の
パトリックは、私がライフスタイルの記事としてPOCOを読んで、私は完全に同意するところで、それは素晴らしい記事です。それは実際に私が推奨ジミーニルソン帳からのセクションです。私はそれがオンラインで入手可能だったとは思いもしませんでした。彼の本は本当に私はPOCO / DTO /リポジトリ/及びその他のDDD開発プラクティスで見つけた最良の情報源です。
POCOは、単に外部のフレームワークへの依存をとらないオブジェクトです。それはPLAINです。
POCOは行動を持っているかどうか、それは軽微です。
A DTO(通常動作に富むであろう)ドメインオブジェクト得るようなPOCOであってもよい。
通常のDTOは、外部のフレームワークへの依存関係を取る可能性が高い(例えば、属性)直列化の目的のためとして、一般的には、システムの境界で終了します。
ドメイン層が中央に配置されているので、そのオブジェクトは、この時点で、その層の外部依存性を持つべきではない(多くの場合、広くDDDアプローチ内で使用される)は、典型的なタマネギスタイルのアーキテクチャでます。
いと思いDTOきPOCO.DTOはご利用についてのオブジェクトがPOCOりのスタイルのオブジェクト(切り離計概念).
その一例がPOCOありDTOはきゃPOCOの内ドメインモデル/ビジネスロジックモデルで、素敵なOO表象の問題。があPOCOの全アプリケーションですが、このようなものか少し望ましくない副作用な知識はすべて解放されます。DTOのためのインスタンスの使用からサービス層のUI絡をDTOの平坦な表現は、データのみの使用を提供するためのUIのデータ、通信機能が強化、サービス。本サービスの層がマッピングをDTOの両方のPOCOドメインのオブジェクト。
更新 マルタンファウラー 言 このアプローチは、道路、きがあった場合、大きなミスマッチの間のドメイン層のユーザーインターフェースです。
DTOのための主要なユースケースは、Webサービスからデータを返すです。この例では、POCOとDTOは同等です。それは、Webサービスから返されたときPOCO内のすべての動作が除去されるので、実際にそれが動作しているか否かの問題ではありません。
ここでの一般的なルールがあります。 POCO ==良いです。 「企業」のパターンは、Java EEの世界で多くの人々の脳を破壊してきました。 .NETの土地に過ちを繰り返さないようにしてくださいます。
DTOクラスをデシリアライズ/異なるソースからのデータをシリアル化するために使用されます。サービス、ファイル、データベースなどあなただけのことのいくつかの部分を使用することもできるが、あなたがそのデータをデシリアライズするための簡単な方法をしたい:あなたはソースからオブジェクトをデシリアライズしたい場合には、外部ソースは、それが何であるかは重要ではありません。オブジェクト。その後、あなたが使用したいXModelにそのデータをコピーします。シリアライザはDTOオブジェクトをロードするための美しい技術です。どうして?あなただけの(デシリアライズ)オブジェクトをロードするために、1つの機能を必要とします。
TL;DR:
A DTOを記述するパターンの状態にします。A POCOな記述してあります。このように"オブジェクト"にOOP.ですからPOJO(Java)、新造によるマルタンファウラーの方、文字通りだけで記述するとしてローカル色の強名な"オブジェクト'がオブジェクト'はない!
A DTOはオブジェクトのパターンを使移転状態の層間の問題です。って行動(技術的にa poco)として行動しない変異することができる。例えば、する方法列化そのものです。
A POCOは、印刷に必要なオブジェクトが、どのようです'plain'では特別ではありません。でんでCLRオブジェクトのない暗黙のパターンです。汎用。なにか他の枠組みその場合はPOCO [JsonProperty]
またはEF以この特性は、例えば、その思いではないPOCO.
こちらも異なる種類のオブジェクトのパターンの比較:
- ビューモデル:モデルに使うデータがあります。通常はデータのためのアノテーション支援の結合およびバリデーションを実施します。にョれた行為としてのコントローラです。これまで以上に、DTO
- 値オブジェクト:を表すのに使用される値
- 総根:管理のための状態と不変量
- ハンドラ:使用に対応するイベント/メッセージ
- 属性:使用して装飾への対応横断的な懸念
- サービス:を用いて行う複雑なタスク
- コントローラー:制御フローの要望と回答
- 工場:使用の設定及び/又は組み立て複雑なオブジェクトのために使用されるコンストラクタがおかしいのです。また意思決定するオブジェを作成する必要があります。
- リポジトリ/DAO:使用データにアクセス
これらはすべてだけでは、知ることの多くは一般的に結びつくというパターンです。にするも呼ばれていた"オブジェクト"もしくはしてしまう可能性もあります。具体的にその意図と呼んでいるようです。こうしてデザインパターン;記述する複雑な概念なのです。DTOはパターンです。総ートはパターン、モデルパターン例MVC&ョ).POCOなパターンです。
A POCOさんを記述するパターンです。では別の方法を参考にクラスオブジェOOP.も抽象的コンセプトで参照する活動も実施しています。IMOにあり、一方向の関係では、オブジェクトに達するので機能することができ目的できれいにすることはできませんa POCO.例えば、一度のマークアップクラスの装飾はそれを動作させるために一部の枠組みではなくなりPOCO.そのため:
- A DTOはPOCO
- A POCOではないDTO
- 視モデルはPOCO
- A POCOではないビューモデル
を作る上でのポイントとの区別をとおしつつパターンは明確で一貫して努力をしな懸念をタ間の接続に適しています。例えばビジネスオブジェクトの方法の変更に状態が飾られる地獄EFの装飾の保存にSQLサーバー JsonPropertyできるように送り返す間APIエンドポイントそのオブジェクトが不寛容の変更、それが散乱する性質(例えばUserId,UserPk,UserKey,UserGuid、そのマークアップに保存されないのDBや他のマークアップを行うな直列化されるJSONのAPI endpoint).
その場合は教えていたDTOしんろく用いることはありません以外のもの移動状態です。していると言われたならばっかしたビューのモデルにしっかくなってに保存されたデータベースです。だったドメインモデル、そして思うくらかにしてくれるものではない依存関係もの以外の領域です。だんうした姿は、なにも聞かせていただきましています。
でものDTOそれらを呼び出さないでください。彼らは....期間のをモデルと呼ばれています。モデルは、行動を持っていることはありません。私はこのダム用語のDTOを思い付いたか分からないが、それは.NETの事は、私が理解することができ、すべてのですでなければなりません。事** MVCのビューモデル、同ダムを考え、モデルは、彼らはすべてのモデルである、層サーバ側との間またはワイヤにわたり状態を転送するために使用されています。データを持つプロパティ。これらはあなたがワイヤーOVE合格したモデルです。モデル、モデルモデル。それでおしまい。
私は愚かな用語はDTOは、私たちの語彙から離れて行くことを望む。