【发布时间】:2012-07-26 10:08:28
【问题描述】:
我有一个具有这种结构的 C# 解决方案:
- 项目1:包含一个Dao(可以包含多个)
- 项目2:包含一个接口(只有一个)
项目 3:具有自己接口的 wcf 服务
项目1中的dao实现了项目2中的接口。
- 项目 3 中的 wcf 服务接口实现/继承/继承了项目 2 中的接口。
我遇到的问题是需要项目 2 中的接口来描述我的 dao 类。需要wcf接口来描述我在项目3中的wcf服务中有哪些功能。这两个接口完全一样,除了wcf属性在wcf接口上,因为dao中的所有功能都需要通过wcf 服务文件也是如此。实现或更确切地说是 dao 类可以更改/交换,但必须始终遵循相同的结构,因此需要接口。现在,当我尝试在我的 wcf 接口中实现它时,这两个接口是相同的,我被告知我必须有效地覆盖我派生的接口中的所有方法。这是正确的做法吗? wcf 接口需要实现项目 2 中的接口,以便提供我们需要的 dao 中的所有功能(这就是全部)。
之前我的项目设置如下:
- 项目1:包含道
- 项目 2:包含与 wcf 的接口 属性也是如此
- 项目 3:不包含接口,只包含 wcf 服务
dao 和 wcf 服务都实现了与项目 2 相同的接口。将 wcf 属性放在接口上是否会在与 dao 一起使用时产生任何不利影响?我可能遇到的一个问题是 wcf 接口最终可能具有基本接口没有的额外功能,因此我认为以前的结构是错误的。说实话我不知道。
我知道我可能没有很清楚地解释它,实际上这里涉及两个甚至三个问题,但这是最好的表达方式。我想我的三个主要问题如下:
- 哪种继承/实现结构最好,为什么?
- 将实现 wcf 服务使用的相同接口 普通类有任何不良影响(由 wcf 属性引起,即 [ServiceContract]、[OperationContract])。
- 是否会覆盖基接口提供的所有方法 正确吗?
【问题讨论】:
-
为什么dao要实现接口?您可以从中获得什么好处,实现相同的界面。由于恕我直言,接口是旨在遵守某些业务逻辑的合约,而不是数据访问。
-
因为我想要一个接口来描述某种类型的 dao 以及它应该具有的方法。它只是对接口的简单编程。我可能有多个实现此接口的 dao,我希望它们都明确地具有相同的方法,这将使它们可互换,以便 wcf 服务可以以统一的方式访问它们,无论使用哪个 dao。我将使用行 IClusterQueryService foo = new MyDao() MyDao 实现接口。这意味着我可以使用任何 dao,只要它实现了 IClusterQueryService 接口。
-
同意 100%,但我的问题是为什么 DAO 具有与业务向外部世界公开的 WCF 服务相同的接口,这两者不应该不同吗?
-
好吧,通常我猜它们会有所不同,但我的界面和 dao 是在引入 wcf 之前设计的,碰巧dao 中的所有功能实际上都需要通过 wcf 公开,所以两个接口(一个用于描述 dao,一个用于 wcf)碰巧是相同的。
标签: c# inheritance interface overriding