[解決済み] DTOをDomain Objectにマッピングするためのベストプラクティス?
質問
マッピングに関する質問をよく見かけます。 DTO をドメインオブジェクトにマッピングすることに関する多くの質問を見ましたが、私の質問に答えているとは思えませんでした。 私は以前に多くの方法を使用し、私自身の意見を持っていますが、私はもう少し具体的なものを探しています。
状況です。
私たちは多くのドメインオブジェクトを持っています。 私たちはCSLAモデルを使用しているので、ドメインオブジェクトはかなり複雑になり、独自のデータアクセスを含んでいます。 これらのオブジェクトを通信でやり取りするのは好ましくありません。私たちは、多くのフォーマット(.Net、JSONなど)でデータを返す新しいサービスをいくつか書く予定です。 このため(および他の理由)、私たちはワイヤー上で渡すための無駄のないデータ転送オブジェクトも作成します。
私の質問は、DTO とドメイン オブジェクトはどのように接続されるべきか、ということです。
私の最初の反応は ファウラー、DTOパターン型の解決策 . 私はこれが行われるのを何度も見てきましたし、私にとっては正しいことだと感じています。 ドメイン オブジェクトには、DTO への参照は含まれていません。 外部のエンティティ(マッパーまたはアセンブラ)が呼び出され、ドメイン オブジェクトから DTO が作成されます。 通常は ORM がドメインオブジェクト側にあります。 この欠点は、実際の状況に応じてマッパーが非常に複雑になる傾向があり、非常に壊れやすくなることです。
提示された別のアイデアは、DTO が単なるリーン データ オブジェクトであるため、ドメイン オブジェクトに DTO を含めるというものです。 ドメイン オブジェクトのプロパティは内部的に DTO プロパティを参照し、要求された場合は DTO を返すことができます。 これには何の問題もありませんが、間違っているように感じます。 私は、いくつかの記事で NHibernate を使用している人がこの方法を使用しているように見えるいくつかの記事を見ました。
他の方法はないのですか? 上記の方法のうち、一つでも使う価値がありますか? もしそうなら、あるいはそうでないなら、その理由は?
どのように解決するのですか?
ドメインと DTO の間に位置するマッパーを持つことの利点は、単一のマッピングしかサポートしていないときにはあまり明らかではありませんが、マッピングの数が増えるにつれて、そのコードをドメインから分離することで、ドメインをよりシンプルで無駄のないものに保つことができます。余分な重量でドメインが乱雑になることはないでしょう。
個人的には、私はマッピングをドメインエンティティから切り離し、私が「マネージャ/サービス層」と呼ぶものに責任を負わせるようにしています。これは、アプリケーションとリポジトリの間に位置する層であり、ワークフローの調整などのビジネスロジックを提供します(Aを変更する場合、サービスAがサービスBで動作するようにBも変更しなければならない場合があります)。
もし私が多くの可能な終了フォーマットを持っているなら、例えばエンティティを変換するためにVisitorパターンを使用できるプラグイン可能なフォーマッタを作成することを検討するかもしれませんが、私はまだこのように複雑なものの必要性を見つけていません。
関連
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] asp.netでWebサービスのタイムアウト時間を長くする方法は?
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] 実際のサービスはデータを返すのに、なぜWebServiceはnullを返すのですか?
-
[解決済み] WCFのデバッグ時にサーバーに自動的に踏み込むことができない
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] DTO、VO、POJO、JavaBeansの違い?
-
[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] <Database> コンテキストを支えるモデルが、データベース作成後に変更されました。
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] gacutil.exeはどこですか?
-
[解決済み] VB.NETでファイル名を一意のサフィックスに変更するには?
-
[解決済み] 埋め込みリソーステキストファイルの読み方
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?