2013-02-12 149 views
0

我有一個基類重複依賴派生類

public B(IFoo foo, IBar bar, IFooBar fooBar, IAlice alice, IBob bob) { } 

我有很多派生類看起來像:

public class D : B { } 

但他們需要滿足的B構造,所以他們有依賴關係:

public D(IFoo foo, IBar bar, IFooBar fooBar, IAlice alice, IBob bob) 
    : base(foo, bar, fooBar, alice, bob) { } 

就像我說的,我有很多這些。這似乎很糟糕。它是重複的。一個代碼更改爲B漣漪通過很多類,都需要一個小的,無聊的變化。

幫助?

+0

是的,這看起來好像你有一個糟糕的設計可能,你有一個更具體的例子,爲什麼你認爲你需要這樣做?如果您的基礎設計正確,您不應該產生連鎖反應。 – awright18 2013-02-12 03:31:44

+0

@ awright18:如何避免? – JohnGoesTo11AgainAndAgain 2013-02-12 03:53:37

+0

如果您正在使用大量的接口,您可以合併/撰寫它們。接口可以從其他接口繼承。但接口應該只做它需要做的事情,我猜你的派生對象試圖做太多的事情。 – awright18 2013-02-12 04:08:44

回答

2

我想看看有什麼變化你讓到B,如果他們表示需要一個額外的子類,B的大部分子類應繼承的。

有很多的構造函數的參數是不是一個真正的問題,只是不便。你可能希望創建一個類來存儲所有的基類參數。當你需要一個D的實例時,填充它的一個實例,然後將它傳遞給D,然後D將它傳遞給B並提取它的所有數據。

public Bargs(IFoo foo, IBar bar, IFooBar fooBar, IAlice alice, IBob bob) { } 
public B(Bargs myArgs){} 
public D(Bargs myArgs) : B(myArgs){}