5

このテーマについてコミュニティがどう感じているか知りたいです。私は最近、NHibernate/WCF シナリオ (エンティティがサービス レイヤーで永続化される) について質問し、ここで間違った方向に進んでいる可能性があることに気付きました。

私の質問は、Web サービス (このシナリオでは WCF) の背後で永続的なオブジェクト グラフ (NHibernate、LINQ to SQL など) を使用する場合、これらのエンティティをネットワーク経由で送信することを好みますか? それとも、一連のより軽量な DTO (循環参照を除く) を作成しますか?

4

5 に答える 5

9

DTO。オブジェクトからオブジェクトへのマッピングに AutoMapper を使用する

于 2009-11-06T15:57:08.130 に答える
3

私は以前にこのシナリオに何度も参加しており、両方の経験から話すことができます. もともと私は自分のエンティティをシリアル化し、そのまま送信していました。これは機能的な観点からは問題なく機能しましたが、調べれば調べるほど、必要以上のデータを送信していることに気付き、どちらの側でも実装を変更する能力を失っていました。以降のサービス アプリケーションでは、Web サービスとの間でデータを取得することだけを目的とした DTO を作成しました。

相互運用以外では、ネットワーク経由で送信されるすべてのフィールドについて考える必要があることは、(私にとって) 必要のないデータやさらに悪いデータをクライアントに送信しないようにするのに非常に役立ちます。 .

他の人が述べたように、AutoMapperはエンティティから DTO へのマッピングに最適なツールです。

于 2009-11-06T16:19:23.860 に答える
1

私はほとんどの場合、ネットワーク経由で転送し、サーバーとクライアントでより豊富なエンティティを使用するために dto を作成しました。クライアントにはいくつかの共通のプレゼンテーション ロジックがあり、サーバーにはビジネス ロジックがあります。dtos とエンティティ間のマッピングは馬鹿げている可能性がありますが、それを行う必要があります。AutoMapper などのツールが役に立ちます。

于 2009-11-06T15:58:10.973 に答える
1

シリアル化されたエンティティを Web サービスから外の世界に送信しますか? 答えは間違いなくノーです。そうすると、最小限の相互運用性が得られます。DTO は、C#、Java、Javascript などを使用しているかどうかに関係なく、任意の言語でインスタンス化できる一連の「オブジェクト」を定義することで、この問題を解決するのに役立ちます。

于 2009-11-06T16:09:13.853 に答える
1

ネットワーク経由で nHibernate オブジェクトを送信する際に常に問題がありました。特に ActiveRecord モデルを使用している場合。および/またはオブジェクトがセッションに関連付けられている場合 (yuck)。別の厄介な結果は、nHibernate がメソッドのエントリで (オブジェクトに到達する前に) オブジェクトをロードしようとする可能性があり、これも問題を引き起こす可能性があることです。

それで...ここでメッセージを取得しますか?問題、問題、問題... DTO のすべての方法

于 2009-11-06T16:22:16.473 に答える