将wcf服务合同与接口定义分开是否有任何价值?

时间:2010-02-02 23:40:25

标签: wcf contracts

我有一个接口ICustomerService:

public interface ICustomerService
{

  CustomerList FindAll();
}

和实现该接口的具体类。现在我需要使用wcf / rest在Web上公开该方法,我必须将接口定义更改为:

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

我的问题是,如果客户端想要使用dll引用而不是使用其余的api来使用实现,那么将这些属性附加到接口是否有任何缺点?我知道使用REST的缺点就像在uri中将参数作为类型字符串一样。

1 个答案:

答案 0 :(得分:0)

除了代码可读性之外,属性应该没有缺点(如果你的客户必须查看你的界面来源)。

任何感兴趣的人(如WCF框架)都可以读取属性,或者将忽略这些属性。实际上,任何实施课程都无法看到它们(见this question)。

但在架构级别,请考虑使用2个接口,一个用于dll引用客户端,另一个用于REST客户端。它们可能与开头类似,它们甚至可能共享相同的基本接口和实现,但如果业务案例需要,您可以使它们相互转移。
此外,这使您可以在WCF Web应用程序项目中保留WCF属性填充接口,并在核心类库项目中保持干净的接口和实现。