Строго ли необходимо или выгодно разделять ServiceContract и реализацию службы WCF?

#.net #wcf

#.net #wcf

Вопрос:

Сегодня я начал играть с WCF. Одна вещь, которую я заметил, заключается в том, что по умолчанию Visual Studio определяет службу WCF в терминах ServiceContract , который является интерфейсом; и класс, фактически реализующий этот интерфейс. Однако в этой статье я нашел следующий фрагмент (то, что на самом деле делает код, не имеет значения):

 [ServiceContract]
public partial class BookmarkService
{
    // in-memory resource collections
    Dictionary<string, User> users = new Dictionary<string, User>();
    Dictionary<string, Bookmark> bookmarks = new Dictionary<string, Bookmark>();
    [WebGet(UriTemplate = "users/{username}")]
    [OperationContract]
    User GetUserAccount(string username)
    {
        // ...
  

Итак, необходимо ли отделять интерфейс службы WCF от ее реализации? Если это не является строго необходимым для этого, дает ли это какие-либо преимущества по сравнению с отказом от этого?

Ответ №1:

Нет строгой необходимости отделять контракт на обслуживание как интерфейс — как вы видели.

Но это крайне желательно сделать:

  • вы получаете больше гибкости
  • вы получаете лучшую тестируемость

Службы WCF идеально подходят для использования интерфейсов для определения контракта, который гарантирует служба, и отделения его от фактической реализации.

Кроме того, имея контракты в качестве интерфейсов, вы можете иметь единый класс реализации сервиса, реализующий несколько интерфейсов сервиса — еще одна степень гибкости.