Есть ли какая-то ценность в отделении контрактов на обслуживание wcf от определения вашего интерфейса? - PullRequest
2 голосов
/ 03 февраля 2010

У меня есть интерфейс ICustomerService:

public interface ICustomerService
{

  CustomerList FindAll();
}

и конкретный класс, реализующий этот интерфейс. Теперь мне нужно представить метод через Интернет с помощью wcf / rest, и мне пришлось изменить определение интерфейса на это:

[ServiceContract]
public interface ICustomerService
{
  [OperationContract]
  [WebInvoke(
   Method = "GET",
   UriTemplate = "Customers")]
  CustomerList FindAll();
}

Мой вопрос заключается в том, есть ли какие-либо недостатки в том, что эти атрибуты присоединены к вашему интерфейсу, если есть клиенты, которые хотят использовать реализацию, используя dll-ссылку вместо использования остальных API? Я знаю о недостатках использования REST, таких как необходимость иметь ваши параметры в качестве строки типа, если они в URI.

1 Ответ

0 голосов
/ 04 февраля 2010

Не должно быть никаких недостатков атрибутов, за исключением, возможно, читабельности кода (если ваши клиенты должны смотреть на ваш интерфейсный источник).

Атрибуты могут быть прочитаны любым заинтересованным лицом (например, инфраструктура WCF) или будут игнорироваться. На самом деле они не будут видны из любого реализующего класса (см. этот вопрос ).

Однако на уровне архитектуры рассмотрите возможность использования 2 интерфейсов: один для клиентов, ссылающихся на dll, и один для клиентов REST. С самого начала они могут быть похожими, они могут даже использовать один и тот же базовый интерфейс и реализацию, но у вас есть возможность заставить их отклоняться друг от друга, если этого требует бизнес-сценарий.
Кроме того, это дает вам возможность сохранить интерфейсы, заполненные атрибутом WCF, в проекте веб-приложения WCF, а также очистить интерфейсы и реализации в проекте библиотеки базовых классов.

...