比方說,我有一個「建築成本」計算類,它帶有一個子計算器列表。使用C#中繼承相同屬性的接口的方法
子計算器都定義了一個接口,該接口定義該子計算器所需的輸入。例如。 IWallsCostInputs
,IRoofCostInputs
。這使得子計算器能夠清楚地表達他們需要的數據。
有一個業務對象包含所有子計算器和更多的數據(如DateLastModified等)。例如。 BuildingCostInputs
。
我想BuildingCostCalculator
採取定義所有需要
public interface IBuildingCostInputs : IWallsCostInputs, IRoofCostInputs
但是如果在IWallsCostInputs
和IRoofCostInputs
的重複屬性,這並不工作輸入接口。
我覺得我的選擇是如下:
- 使用new關鍵字在
IBuildingCostInputs
- 定義一個實現
IWallsCostInputs
和IRoofCostInputs
一個抽象類,有BuildingCostInputs
從中獲得並把它傳遞到BuildingCostCalculator
。 - 創建實現
IWallsCostInputs
和IRoofCostInputs
的POCO,在此和BuildingCostInputs
之間的(自動)映射並將其傳遞到BuildingCostCalculator
。
(1)我覺得我willcause麻煩時,我通過IWallsCostInputs
和IRoofCostInputs
引用複製的特性,並採用測試雙打(如MOQ)時。
(2)在特定情況下不起作用,因爲我的業務對象已經是繼承鏈的一部分。
(3)確實有效,它看起來像我需要做的。不過,我寧願避免映射和POCO的框架開銷。
有沒有人有任何意見,或有更好的方式來實現我想要做的?感覺就像我應該能夠以一種清晰,簡潔和富有表現力的方式來實現這一點,但也許這是不可能的。
謝謝
Eh,*顯式接口實現*? https://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx –
我不是顯式接口實現的粉絲,在這種情況下,我不明白它會如何比任何其他選擇都要好。 – cedd
不熟悉c#或者這個試圖解決什麼問題,但是這對我來說看起來很奇怪,爲什麼你會有一個接口(基本上)定義數據結構而不是指定行爲? – blank