2012-11-07 29 views
3

我與一些舊代碼工作,有這樣的現有的接口:C#接口過於死板

public interface IProcess 
{ 
    IDTO Process(IDTO request); 
} 

沒有再與實現接口的一個巨大的switch語句返回對象(其中17人)的工廠。創建的對象,然後調用過程,如:

return xProcess.Process(requestDTO); 

我的問題是,我現在需要改變其中的幾個像第二個參數來傳遞:

xProcess.Process(requestDTO, Id); 

我在尋找一個優雅實現這一目標的方法。

我試圖使得界面的抽象的類,如:

public abstract class IProcess 
{ 

    public virtual IDTO Process(IDTO request) 
    { 
     return null; 
    } 

    public virtual IDTO Process(IDTO request, int Id) 
    { 
     return null; 
    } 
} 

這使我覆蓋在創建的類的加工方法,但是我有的iProcess由另一個接口,這是現在繼承的一個問題明顯破碎。

傳統平臺非常龐大,測試覆蓋率並不是很高,所以我正在尋找一個不錯的優雅解決方案,對代碼庫的其餘部分影響最小。也許,我忽略了一種模式?

任何人都可以幫忙嗎? (例子將是巨大的)

感謝

大衛

回答

7

您不能創建一個新的接口,從現有的繼承,像

public interface IProcess2 : IProcess 
{ 
    IDTO Process(IDTO request, int Id); 
} 

然後改變你的類從繼承新的一個。

這應該會阻止現有IProcess的任何用戶中斷。

+0

謝謝。我確實玩過這個主意,但工廠返回IProcess,並且出現錯誤,提示我無法將IProcess轉換爲IProcess2。我錯過了什麼嗎? – davy

+1

是的,工廠也需要改變:) –

+0

@Justin - 絕對:),剛剛添加評論說這就是我需要做的。非常好,非常感謝。 – davy