WCFの達人に新しい質問があります。
したがって、User
データベース操作に使用するDBの「User」表現に近いクラスがあります。ここで、このクラスをデータコントラクトとして使用する2つの異なるサービスコントラクトが必要ですが、それぞれ独自の方法で...つまり、
public class DBLayer
{
void InsertUsers(List<User> userList)
{
// both 'PropertyVisibleForService1' and 'PropertyVisibleForService2'
// are used HERE to be inserted into their columns
}
}
[DataContract]
public class User
{
[DataMember] public string PropertyVisibleOnlyForService1{...}
[DataMember] public string PropertyVisibleOnlyForService2{...}
}
[ServiceContract]
public interface IService1
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService1' inside
}
[ServiceContract]
public interface IService2
{
List<User> GetUsers(); // user with 'PropertyVisibleOnlyForService2' inside
}
したがって、各サービスは、のサブセットである異なる種類のユーザーを取得するという考え方です'User'
。DB操作にはそのまま使用したいのですが'User'
、これを実現するための選択肢は何でしょうか。本当に別のデータコントラクトを作成する必要がありますか、それとも別のよりスマートな方法がありますか?
最善の方法は、解決策を提供するだけでなく、いくつかのベストプラクティスと代替案を説明することです。
前もって感謝します。
編集1:概要をわかりやすくするために、ここにダミーのDBLayerクラスを追加しました。この場合、継承が適切でない可能性がある理由を説明します。
解決策は、最後に''から/にマップするデータコントラクトとして別の' UserForService1
'と' 'を使用することですが、他の観点が必要でした。UserForService2
User
EDIT2:この場合私を助けた非常に良い記事:http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only-for-backward-compatibility.aspx