0

WCFWebサービスから取得したエンティティを返す関数があります。このエンティティをどのように返す必要がありますか?元のオブジェクト(Webサービスから)を返すことはできないと思います。これは、関数の呼び出し元(他のアセンブリから)がこのWebサービスへのサービス参照を強制されることを意味するためです(クラスはで定義されているため)サービスリファレンス)と私はそれを避けたいと思います。また、インターフェイスを実装するためにWCFエンティティを変更できないため、インターフェイスも使用できないと思います。

一方、元のエンティティが持つすべてのプロパティを正確に返す必要があります。すべてのプロパティが存在する必要があり、値やプロパティの名前とタイプに変換/調整する必要はありません。

元のWCFクラスと同じプロパティを複製する新しいクラスを作成する方がよいでしょうか。どのように実装すればよいですか。元のオブジェクトからすべての値をコピーする新しいオブジェクトを作成する方がよいでしょう。

return new Foo() { Id = original.Id, Name = original.Name、...など}

または、次のようなgetsetメソッドでラップします。

public int Id
{
   get { return _original.Id; }
   set { _original.Id = value; }
}

また、WCF参照の元のクラス名とのあいまいさを回避するために、新しいクラスに名前を付ける方法はありますか?

4

2 に答える 2

0

実際、それはあなたが消費者であるかどうかによって異なります。あなたが消費者であれば、型アセンブリを再利用しても問題ありません。ただし、消費するサービスを制御できない場合は、[DataContract]属性を持つ DTO オブジェクトを使用することをお勧めします。

于 2013-02-28T12:47:32.443 に答える
0

お分かりのように、クライアントにサーバーと同じ型を強制的に使用させるのは得策ではありません。これにより、サーバー アプリケーション アーキテクチャがクライアントに不必要に公開されます。最適なオプションは、データ転送オブジェクト (DTO) を使用することです。

クライアントに公開するエンティティごとに DTO を使用できます。DTO には、エンティティのすべての必須フィールドを公開するためのプロパティがあります。値インジェクター (valueinjecter.codeplex.com) や @stephenl が提案する自動マッパーなどのライブラリがあり、あるオブジェクトから別のオブジェクトに値をコピーするのに役立ちます。

DTO を個別の名前空間とアセンブリに配置して、最適な物理的分離を実現します。YourCompany.YourProduct.Data.Entitiesをエンティティの名前空間として、YourCompany.YourProduct.Data.DTOを DTO として使用できます。

于 2013-02-26T06:56:28.597 に答える