1

分散環境を処理するために WCF サービスを必要とする新しいプロジェクトを開始しました。私はまだ物事を実装するための最良の方法を見つけようとしています.

NHibernate を使用したいのですが、シリアライゼーションに対処するいくつかの方法を見てきました。これは 3.0 で処理されますか? トラックの中に wcf_context があることに気付きました :D

それが処理されない場合、誰かが私を正しい方向に向けることができますか?

みんな、ありがとう

4

2 に答える 2

3

通常、サービスからデータを返す場合は、そのサービス呼び出しに関連するもの、DTO (データ転送オブジェクト)、または WCF の DataContract を含む、サービスの目的に固有のクラスを返す必要があります。世界。

エンティティと DTO の間のマッピングに特に役立つツールの 1 つがAutoMapperです。AutoMapper を使用するか、単に「左右」コーディングを使用するかに関係なく、マッピングを行うと実行が発生するため、遅延読み込み/遅延実行の問題が回避されます。

サービスからエンティティを返すのが得策ではない理由はいくつかあります。ここではそのいくつかを示します (ほとんどの場合、さまざまな意見があります)。

  • 永続性 (あなたの場合は nhib) によっては、別のアプリやサーバーでは正しく実行されないエンティティに動作 (実行の遅延) または状態が関連付けられている可能性があります。
  • エンティティの結果をサービス レイヤーで返すと、多くの場合、非常に CRUD に似た呼び出しになり、非常におしゃべりなサービス レイヤーになり、非常に非 SOA になります。
  • さまざまな呼び出しでは、エンティティとは何かだけでなく、多かれ少なかれデータが必要になる場合があります。DTO を使用すると、必要なものを正確にまとめることができ、不要なものは何もありません。
  • 再利用可能なサービス レイヤーを構築しようとしている場合は、クライアントがサービス内のもの以外のエンティティまたはドメイン ロジックにアクセスできると想定しないでください。それらは別のアプリや別の言語などで書かれている可能性があります。エンティティがデータを移動するために使用している場合、これを忘れがちです。
于 2010-12-28T02:00:58.163 に答える
0

WCF を使用して遅延読み込みオブジェクトを渡すことはできません。

回避策はいくつかありますが、次の WCF バージョン (2010 年 4 月に近日公開) で修正されるバグがあります。

それ以外は、適切な DataContract でオブジェクトを定義する限り、それらは一緒に喜んで去ります。

リストのシリアル化にも問題があります - 特定のフラグを指定して svcutil を使用してプロキシを生成する必要があります。そうしないと、問題が発生します (リストが配列になり、アイテムを追加できなくなります) (特定の種類のリストを使用しない限り)。 WCF と NHibernate の両方が同意します) - それを調べます (Nhiberate と WCF リスト) -

于 2010-03-30T22:03:33.053 に答える