2015-04-01 45 views
2

在常規的敏捷編程技術過程中,我經常做很多重構。如果我找到共同的東西,他們就是基礎班的候選人。假設這個代碼模式:如何爲基類創建可選類型注入?

public Subclass : BaseClass{ 
    private dynamic SomeValue = null; 
    public Subclass(){ 
     SomeValue = BaseClass.Method<T>(); 
    } 
} 

一切工作正常,直到我厭倦了不斷注入式進入方法。爲什麼不把類型注入基類呢?但是請稍等,我不想重複使用上面這種模式的20個課程。現在我有兩種可以使用的潛在模式,這是第二種。

public Subclass : BaseClass<T>{ 
    private T SomeValue = null; 
    public Subclass(){ 
     SomeValue = BaseClass.Method(); 
    } 
} 

該第二圖案可以是第一實施例的邏輯推導由此我們只是移動的類型的類CTOR,而不是使用在每種方法的通用類型。

我想問問社區他們的想法如何在不改變任何當前代碼的情況下完成這兩個構造,而是添加支持泛型類型基類模式。

我已經閱讀過其他大多數關於StackOverFlow Nazi Soup警察關閉的「可選泛型類型」的帖子。

+2

只要不使用繼承,你不會有「注入」任何東西。不應該使用繼承來提取公共代碼 - 這是一種代碼味道。它只應該用來指定「是-A」關係。使用構圖,控制反轉和真實注入 - 即將想要的類的接口傳遞給構造函數,並使用DI容器來自動執行構建過程 – 2015-04-01 11:57:06

+0

@PanagiotisKanavos謝謝,這就是我正在尋找的答案。 – 2015-04-01 11:58:00

回答

0

再一次,四人幫是對的「贊成繼承」。在這種情況下,BaseClass這個術語可能並不合適,但是您可以看到我們的基類概念在開始時是如何錯誤的,因爲它並不真正問「這真的是Base類嗎?」

public Subclass { 
    private BaseClass bc1 = null; 
    private BaseClass<SomeType> bc2 = null; 
    private dynamic SomeValue = null; 
    public Subclass(){ 
    //I still have base class operation ability, but now... 
    bc2 = new BaseClass<SomeType>(); 
    SomeValue = bc2.Method(); 
} 

}