我有一个新的问题需要向WCF专家请教。
我的类User
与我用于数据库操作的“User”表示非常接近。现在,我想要有两个不同的服务契约来使用这个类作为数据契约,但是每个服务都以自己的方式使用...我的意思是,
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
'进行映射,但我想要其他的观点。编辑2:非常好的文章,在这种情况下对我有所帮助:http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only-for-backward-compatibility.aspx