2012-07-26 93 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