У меня новый вопрос к гуру WCF.
Итак, у меня есть класс 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'
. Имея в виду, что я хочу использовать 'User'
как есть для операций с БД, каковы были бы мои варианты достижения этого? Действительно ли мне нужно создавать разные контракты данных или есть другой способ поумнее?
Лучше всего не только дать мне решение, но и объяснить некоторые передовые практики и альтернативы.
Заранее спасибо.
EDIT1: я добавил здесь фиктивный класс DBLayer для лучшего обзора и почему я думаю, что наследование может быть не лучшим в этом случае.
Решением было бы иметь еще «UserForService1
» и «UserForService2
» в качестве контрактов данных, которые в конце отображали бы / в «User
», но мне нужны были другие точки зрения.
EDIT2: Очень хорошая статья, которая помогла мне в этом случае: http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only-for-backward-compatibility.aspx