【问题标题】:WCF Design: Avoiding Interface DuplicationWCF 设计:避免接口重复
【发布时间】:2015-09-15 23:33:31
【问题描述】:

我发现自己喜欢在这种情况下使用两个相同的界面,这似乎不正确。然而,替代方法似乎是在我的服务中使用 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 可在内部重用?

我相当有信心两者都能奏效 - 对设计最佳实践感兴趣。

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    这真的是一个偏好问题。

    我会使用两个不同的接口。这会增加一些开销,但它允许两个合约向不同的方向弯曲。

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

    【讨论】:

    • 感谢@Derek Van Cuyk。同意你的说法。此外,考虑到这一点,拥有两个接口对于任何必须拿起它的人来说都会更加清晰。在服务中使用 IGetDataService 的实现可能会有点混乱
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2023-03-16
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多