代码之家  ›  专栏  ›  技术社区  ›  darthjit

从接口定义中分离WCF服务约定有什么价值吗?

  •  2
  • darthjit  · 技术社区  · 15 年前

    我有一个接口icustomerservice:

    public interface ICustomerService
    {
    
      CustomerList FindAll();
    }
    

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

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

    我的问题是,如果有客户机希望使用DLL引用而不是RESTAPI来使用实现,那么将这些属性附加到您的接口上是否有任何缺点?我知道使用REST的缺点,比如必须将参数作为类型字符串(如果它在URI中的话)。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Community CDub    8 年前

    除了代码可读性(如果您的客户机必须查看您的接口源代码),属性不应该有任何缺点。

    任何感兴趣的人(如wcf框架)都可以读取这些属性,或者忽略这些属性。实际上,它们在任何实现类中都不可见(请参见 this question )

    但是,在体系结构级别,考虑使用两个接口,一个用于引用dll客户端,另一个用于其余客户端。它们在开始时可能很相似,甚至可能共享相同的基本接口和实现,但是如果业务案例需要,您可以使它们相互转移。
    此外,这也为您提供了在wcf web应用程序项目中保留wcf属性填充的接口,以及在核心类库项目中保留干净的接口和实现的可能性。