我最近開始研究一個Java項目,該項目已經有了一個團隊在3個月內開發的大規模代碼庫。我注意到在許多地方,他們直接在客戶端對象的構造函數中實例化一些對象,而不是使用依賴注入。我想將對象構造重構爲工廠,並使用一些注入框架。Java對象創建模式和設計
我已經創建了一個工廠,基本上是一個工作班次new <type(some params here)>
。這裏沒有什麼特別的東西 - 沒有單身,沒有靜態的工廠模式。只是返回一個新的依賴關係實例的newInstance()
方法。
在代碼中顯示的內容:
class A { A() {
B bobj = new B(); // A and B are coupled directly
}
}
我想重構這個到:
BFactory {
newInstance() { return new B(); // return B implementation }
}
class A {
A(BFactory factory){
B bobj = factory.newInstance(); // A does not know about B impl
}
}
我的論點是對象不應該在任何地方在代碼中創建除了在工廠意味着那個目的。這會促進鬆散耦合,否則你會緊密耦合這兩種類型。一位高級會員(我試圖重構的代碼的作者)認爲,單線工廠是一個過於複雜的設計。
是否存在有關處理此問題的模式的權威性建議/參考?什麼可以用來決定哪種方法更好,爲什麼呢?
我的論點是「如果它沒有損壞,不要修復它。」使用工廠方法獲得的損失耦合不值得花時間或風險(錯誤),它需要觸及代碼庫的每個部分。現在只需滾動它。 – markspace
你可以發表一個簡短的例子來說明你正在談論的事情嗎?你的描述可以被解釋爲幾種不同的方式。 – cyroxis
我會稍微將@ markspace的評論更改爲「等到它壞了才解決它。」。如果當你需要進行一次改變,那麼使用工廠方法將會變得更加簡單和清潔,那麼就需要對該類進行重構。如果某件事正在發揮作用並且不需要改變,那就讓它一個人待着 –