WCF设计:避免接口重复

时间:2015-06-29 13:18:03

标签: c# .net wcf

在这种情况下,我发现自己被吸引到使用两个相同的界面似乎并不正确。然而,替代方案似乎是在我的服务中使用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?

我相信两者都会工作 - 对设计最佳实践感兴趣。

1 个答案:

答案 0 :(得分:1)

这真的是一个偏好的问题。

我会使用两种不同的界面。这是一个更多的开销,但它允许两个合同在不同的方向弯曲。

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