WCF设计:避免接口重复

本文关键字:接口 设计 WCF | 更新日期: 2023-09-27 18:00:15

我发现自己被吸引在这个场景中使用两个相同的接口,这似乎是不对的。然而,另一种选择似乎是在我的服务中使用WCF装饰的接口,这也感觉不对。

示例遵循

这是我的WCF服务的接口

[ServiceContract(Namespace="http://MyNameSpace")]
public interface IGetDataService
{
    [OperationContract]
    List<MyDataObject> GetData();
}

现在,假设服务只从数据库中获取数据。我需要一个实现来促进这种检索。由于方法相同,此类是否也应该实现IGetDataService?或者我应该有另一个接口,例如IDataRepository:

public interface IDataRepository
{
    List<MyDataObject> GetData();
}

请注意,该接口在签名方面与IGetDataService相同。唯一的区别是缺少WCF相关的属性。

class DatabaseDataRepository: IDataRepository
{
    public List<MyDataObject> GetData()
    {
        //  code to query database here
        //  return populated List<MyDataObject>
    }
}

至于WCF服务本身的实现(为了完整性):

class DataService: IGetDataService
{
    public List<MyDataObject> GetData()
    {
        var repository = MyIocContainer.GetInstance<IDataRepository>();
        return repository.GetData();
    }
}

所以,总结一下:我需要IDataRepository还是IGetDataService在内部可重用?

我很有信心两者都能发挥作用——对设计最佳实践感兴趣。

WCF设计:避免接口重复

这确实是一个偏好问题。

我会使用两个不同的接口。这是一个额外的开销,但它允许两个合同在不同的方向上灵活。

例如,如果WCF服务需要公开一个新服务,那么您也不必更改存储库接口。