DTOをドメインオブジェクトにマッピングすることに関連する質問をたくさん見ましたが、彼らが私の質問に答えているとは感じませんでした。私はこれまで多くの方法を使って自分の意見を持っていますが、もう少し具体的なものを探しています。
状況:
多くのドメインオブジェクトがあります。CSLAモデルを使用しているため、ドメインオブジェクトは非常に複雑になり、独自のデータアクセスが含まれます。あなたはこれらをワイヤーで回したくありません。さまざまな形式(.Net、JSONなど)でデータを返すいくつかの新しいサービスを作成する予定です。このため(およびその他の理由)、ネットワーク上を通過する無駄のないデータ転送オブジェクトも作成しています。
私の質問は、DTOとドメインオブジェクトをどのように接続する必要があるかということです。
私の最初の反応は、FowlerのDTOパターンタイプのソリューションを使用することです。私はこれが何度も行われているのを見てきましたが、それは私にとって正しいと感じています。ドメインオブジェクトには、DTOへの参照が含まれていません。ドメインオブジェクトからDTOを作成するために、外部エンティティ(「マッパー」または「アセンブラー」)が呼び出されます。通常、ドメインオブジェクト側にORMがあります。これの欠点は、「マッパー」が実際の状況では非常に複雑になる傾向があり、非常に壊れやすいことです。
別のアイデアは、ドメインオブジェクトが単なる無駄のないデータオブジェクトであるため、DTOを「含む」ことです。ドメインオブジェクトプロパティは内部でDTOプロパティを参照し、要求された場合はDTOを返すことができます。これには問題はありませんが、気分が悪いです。NHibernateを使用している人々がこの方法を使用しているように見える記事をいくつか見ました。
他の方法はありますか?上記の方法の1つは使用する価値がありますか?もしそうなら、そうでなければ、なぜですか?