2012-07-26 214 views
1

我還有一個相關的問題,所以請閱讀它,如果你需要任何進一步的細節。這是與另一個問題的一個要素有關的更具體的問題。我有一個描述道的界面。該接口由另一個接口實現,該接口將成爲wcf服務的接口。原因是巧合的是,父接口中的所有功能都需要通過wcf接口進行公開。父接口不包含wcf屬性,因爲它不需要它們。子接口需要wcf屬性才能用作wcf接口。 wcf接口最終可能包含更多不在父接口中的方法。有兩種方法可以考慮在子接口上獲取這些屬性,如下所示:C#:WCF接口實現另一個接口來暴露方法

  1. 裝飾具有屬性的父接口方法。
  2. 覆蓋子接口中父接口的所有方法,然後用這些屬性修飾這些方法。

解決方案1實際上工作嗎?這意味着wcf屬性是否會被子(wcf)接口繼承並作爲服務契約的一部分提供?這是不好的做法嗎?

解決方案2是一個好主意嗎?爲了用wcf屬性來裝飾它們,重寫所有的方法似乎是反效果的。

+0

備註:我會擔心這個設計;它混合了內部和外部的依賴關係。你確定這個設計嗎?基礎,內部,接口的任何改變將強制在後代,公共接口上。這就是你想要/需要的嗎?我永遠不會將屬性添加到基本接口,因爲它們在那裏沒有功能。 – 2012-07-26 12:00:31

+0

老實說,我不確定接口繼承設計,但是dao中包含的所有公共函數都需要通過wcf服務公開,這意味着兩個接口是相同的。你會建議完全忘記繼承,並將它們視爲單獨的實體,儘管它們如此相似是一個更好的主意嗎? wcf接口可能最終不會相同,因爲它可能包含更多功能以及dao接口中的功能。我想通過使用繼承我可以強制wcf接口,以確保它公開所有的公共道功能。 – CSharpened 2012-07-26 12:08:00

+0

如果您認爲設計錯誤應該怎麼做,如果您有任何想法,那麼請儘量告訴我,因爲我希望聽到它們。我的其他問題可能會幫助您瞭解解決方案的結構。 – CSharpened 2012-07-26 12:09:06

回答

1

我認爲你的解決方案#2是更好的。

它看起來可能會產生反作用,但實際上它是合乎邏輯的:您有一些接口與一些執行某些任務的方法,並且在其上添加另一個「圖層」,以任何您需要的方式公開它們。

這樣,如果你不想通過WCF公開方法,但是假設你想讓它成爲一個RIA服務,或者你想用一個假客戶端代替它,你只需切換'upper'層並改變覆蓋。底層的實際界面甚至不需要意識到這一點。

這一切都要求將「電線」(母接口)連接到正確的「顯示器」(子接口)。

+0

謝謝。這是一個很好的解釋。所以保持它的實現方式,然後重寫父級方法並用wcf屬性裝飾thenm。 – CSharpened 2012-07-26 12:23:53

+1

這是正確的。 – Alex 2012-07-26 12:26:56