2012-07-26 90 views
0

我有这种结构的C#溶液:C#:接口执行结构和重写

  • 项目1:包含一个道(可以含有多于一个)
  • 项目2:包含一个接口(只有一个)
  • 项目3:拥有自己的界面WCF服务

  • 项目1的DAO实现了项目的界面2.

  • 项目3个实现了WCF服务接口/继承/ entends我的问题是,在项目2接口需要来形容我的DAO类(收费)项目2

接口。需要使用wcf接口来描述项目3中我的wcf服务中可用的功能。除wcf接口上的wcf属性外,两个接口完全相同,因为dao中的所有功能都需要公开也是wcf服务文件。实现或者说dao类可以被更改/换出,但必须始终遵循相同的结构,因此需要一个接口。现在,当我尝试在我的wcf接口中实现它时,这两个接口是相同的,我被告知我必须有效地覆盖所有接口的方法。这是正确的事情吗? wcf接口需要实现项目2中的接口,以便它提供我们所需的所有功能(这些都是它们)。

以前我曾在项目设置如下:

  • 项目1:包含DAO
  • 项目2:包含与WCF 属性以及
  • 项目3接口:不包含接口但只是wcf 服务

dao和wcf服务都实现了与项目2相同的接口。是否havi使用dao时,界面上的wcf属性有什么不利影响?我可能会遇到的一个问题是,wcf接口最终可能会有基础接口不具备的额外功能,所以我认为这种以前的结构会出错。真相被告知我不知道。

我知道我可能不会很清楚地解释它,实际上有两个甚至三个问题涉及到,但它是最好的方式。我想我的三个主要问题如下:

  1. 哪个继承/实现结构将是最好的,为什么?
  2. 实施与普通类 普通类中的wcf服务所使用的接口相同的接口有任何不良影响(由wcf属性([ServiceContract],[OperationContract])引起)。
  3. 覆盖所有由基本接口提供的方法是否为 正确?
+0

为什么dao正在实现接口?你可以从中获得什么好处,实现相同的界面。由于恕我直言的界面是旨在遵守某些商业逻辑的合同,而不是完全的数据访问。 – 2012-07-26 10:22:34

+0

因为我想要一个接口来描述一个特定类型的dao和它应该有的方法。这只是接口的简单编程。我可能有多个实现这个接口的dao,我希望他们都定义具有相同的方法,这将使它们可以互换,以便wcf服务可以以统一的方式访问它们,而不管使用哪个dao。我将使用IClusterQueryService foo = new MyDao(),其中MyDao实现接口。这意味着只要它实现了IClusterQueryService接口,我就可以使用任何道。 – CSharpened 2012-07-26 10:26:00

+1

同意100%,但我的问题是为什么DAO具有与业务作为WCF服务公开外接界面相同的接口,这两个不应该不同吗? – 2012-07-26 10:44:12

回答

0

您首先定义的结构很好,您有一个实现接口的接口,并且子接口可以添加不在基础中的新方法。但是,您不需要在子接口中定义基本方法,因为它们都是继承的,所以现在您的子接口将是空的。在这个模型中,子接口可以具有WCF属性。

现在,你将不得不在WCF服务中实现所有这些方法吗?很简单,是因为这就是接口的作用 - 它们定义了必须实施的合同。

+0

感谢您的回复。有一件事我不明白。在解决方案中给出的场景中,我会将wcf属性放在父/基接口上吗?这些属性是与方法本身一起继承的吗?我问,因为如果wcf属性不存在,那么我不能使用它作为wcf接口,除非我重写子接口中的方法,所以我们不能在实现父接口后添加属性,因此它们需要来自某处。 – CSharpened 2012-07-26 10:31:45

+0

WCF属性进入子界面。从另一个继承的那个。这是放置它们的正确位置,因为如果您要公开不在其他界面中的新方法,则可以从此处进行。 – 2012-07-26 10:34:05

+0

那么你是说我应该重写父接口的方法,以便为这些属性添加属性,因为我目前需要父接口中的所有方法作为wcf方法公开。对不起,如果我遇到了愚蠢但我想确定我正确理解 – CSharpened 2012-07-26 10:41:38