WCF - несколько контрактов на службы, использующие почти одинаковые контракты данных

У меня новый вопрос для гуру WCF.

Итак, у меня есть класс User , который близок к представлению «Пользователь» из БД, которую я использую для операций с базой данных. Теперь я хотел бы иметь 2 разных контракта службы, которые используют этот класс в качестве контракта данных, но каждый по-своему ... Я имею в виду,

public class DBLayer
{
    void InsertUsers(List 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 GetUsers();  // user with 'PropertyVisibleOnlyForService1' inside
}

[ServiceContract]
public interface IService2  
{   
    List GetUsers(); // user with 'PropertyVisibleOnlyForService2' inside 
}

Итак, идея состоит в том, что для каждой службы будет свой тип пользователя, подмножество 'Пользователь' . Имея в виду, что я хочу использовать «Пользователь» как для операций с БД, каковы были бы мои варианты для достижения этого? Действительно ли мне нужно создавать разные контракты на данные или есть другой более умный способ?

Лучше всего не только дать мне решение, но и объяснить мне некоторые передовые практики и альтернативы.

Заранее благодарю.

РЕДАКТИРОВАТЬ1: каковы были бы мои варианты достижения этого? Действительно ли мне нужно создавать разные контракты на данные или есть другой более умный способ?

Лучше всего не только дать мне решение, но и объяснить мне некоторые передовые практики и альтернативы.

Заранее благодарю.

РЕДАКТИРОВАТЬ1: каковы были бы мои варианты достижения этого? Действительно ли мне нужно создавать разные контракты на данные или есть другой более умный способ?

Лучше всего не только дать мне решение, но и объяснить мне некоторые передовые практики и альтернативы.

Заранее благодарю.

РЕДАКТИРОВАТЬ1: Я добавил здесь фиктивный класс DBLayer для лучшего обзора и почему я думаю, что наследование может быть не лучшим в этом случае.

Решением может быть использование еще одного « UserForService1 » и « UserForService2 » в качестве контрактов данных, которые в конце будут отображены из / в « User 'но мне нужны были другие точки зрения.

EDIT2: Очень хорошая статья, которая помогла мне в этом случае: http://bloggingabout.net/blogs/vagif/archive/2009/03/29/iextensibledataobject-is-not-only-for-backward- Compatible.aspx

7
задан Learner 20 May 2011 в 08:34
поделиться