2013-03-20 76 views
1

我們正在研究共享相同代碼的兩條產品線。2共享相同代碼的產品線

對於不同的功能,我有兩條產品線都實現相同的接口(或者在某些情況下是基類),並且這些類型將在Main類(兩個產品線分開)中創建並向下遊傳遞。

對於業務邏輯內部的代碼,很難有產品線特定的代碼。我們不希望用戶if(ProductLine ==「ProductLine1」)和其他方法。

所以我打算實現一個Factory類,它將有靜態方法返回NewObject1(),NewObject2()等。此Factory類將作爲Factory.RegisterClient(ProductLine1)在Main類中進行註冊。

因此,通過上述方法,工廠(其內部包含ProductLine1Factor & ProductLine2Factory)知道要創建哪種類型的對象。

您是否知道解決此問題的更好方法?請注意,ProductLine1已經存在,ProductLine2是新東西(但與ProductLine1相似)爲90%。我們不能進行劇烈的重構,以至於兩條產品線都存在。我們希望儘可能進行微創代碼更改。

工廠方法通常會暴露一個接口,但接口的問題是我無法暴露也需要的靜態類型。

如果有些專家會說點什麼,我會非常感激。

回答

1

你的方法聽起來不錯。

爲什麼不使用像NInject或Unity這樣的完全成熟的IoC框架,而不是定製的工廠?您可以爲每個客戶端實施兩次服務,並靜態地在容器配置文件中選擇一個。這樣,如果添加另一個實現,甚至不需要更改代碼的單行,只需重新配置即可在xml文件中進行一些更改。無論如何,IoC容器只是一個工具,無論是否使用它,它只是取代你的工廠(IoC容器有時被稱爲「類固醇工廠」)。

+0

謝謝Wiktor。 Unity也是一個不錯的選擇。 – scriptuser 2013-03-22 16:18:49