从接口定义中分离wcf服务契约有什么价值吗?
我有一个接口ICCustomerService:从接口定义中分离wcf服务契约有什么价值吗?,wcf,contracts,Wcf,Contracts,我有一个接口ICCustomerService: public interface ICustomerService { CustomerList FindAll(); } 以及实现该接口的具体类。现在我需要使用wcf/rest在web上公开该方法,并且我必须将接口定义更改为: [ServiceContract] public interface ICustomerService { [OperationContract] [WebInvoke( Method = "GET
public interface ICustomerService
{
CustomerList FindAll();
}
以及实现该接口的具体类。现在我需要使用wcf/rest在web上公开该方法,并且我必须将接口定义更改为:
[ServiceContract]
public interface ICustomerService
{
[OperationContract]
[WebInvoke(
Method = "GET",
UriTemplate = "Customers")]
CustomerList FindAll();
}
我的问题是,如果有客户端希望使用dll引用而不是RESTAPI来使用实现,那么将这些属性附加到接口是否有任何不利之处?我知道使用REST的缺点,比如必须将参数作为类型字符串,如果它在uri中。除了代码可读性(如果您的客户端必须查看您的接口源代码),属性应该没有任何缺点 任何感兴趣的人(如WCF框架)都可以读取这些属性,也可以忽略这些属性。实际上,它们在任何实现类中都不可见(请参阅)
在体系结构层面,考虑使用2个接口,一个用于引用客户端的DLL,另一个用于其余客户端。它们可能一开始就很相似,甚至可能共享相同的基本接口和实现,但如果业务案例需要,您可以让它们相互转移。
此外,这使您可以在WCF web应用程序项目中保留WCF属性填充的接口,并在核心类库项目中保留干净的接口和实现。除了代码可读性(如果您的客户端必须查看接口源代码),这些属性不应有任何缺点 任何感兴趣的人(如WCF框架)都可以读取这些属性,也可以忽略这些属性。实际上,它们在任何实现类中都不可见(请参阅)
在体系结构层面,考虑使用2个接口,一个用于引用客户端的DLL,另一个用于其余客户端。它们可能一开始就很相似,甚至可能共享相同的基本接口和实现,但如果业务案例需要,您可以让它们相互转移。
此外,这使您可以在WCF web应用程序项目中保留WCF属性填充接口,并在核心类库项目中保留干净的接口和实现