我工作的一個Web應用程序是一箇舊的遺留系統,最近已經遷移到git。該系統相當龐大。兩個不同的網站運行這個相同的軟件;然而,代碼的很多部分使用簡單的控制語句(如果site =='this'{do custom business logic;})來執行特定於站點的事情。這個策略已經使用了十多年了,而且越來越難看了。多個網站,單個代碼庫:git fork?
由於代碼庫的很大一部分已經在兩個站點之間分歧,我們正在考慮分叉庫。棘手的是,大部分代碼在兩個系統之間合法共享。因此,如果在共享代碼中修復了一個錯誤,那麼修復進入分支似乎會非常棘手。例如,我們可以使用補丁。或者,我們可以在叉點創建分支,挑選更改,然後使用拉取請求。但是這兩種方法對我來說都過於複雜,我想盡量減少複雜性。
現在的問題。 分叉似乎是一個很好的方法嗎?我們是否應該使用分支機構,然後選擇修復/增強共享代碼?
另外,我會再次強調這是一個很大的遺留系統。我們一直致力於改進系統,將共享JavaScript模塊放入自己的存儲庫並在NPM中發佈這些模塊。 (我們正在遵循Michael Feather的書中提出的指導原則,與遺產代碼有效地合作)。這就是說,改進大型遺留系統是一個緩慢的過程。我們希望儘量減少重構,並不斷進行緩慢的改進。
你提出的只是另一個版本的「越來越難看」的方法,你已經有了。它並不能真正解決問題,它只會讓別的東西變得醜陋。相反,我會建議一些重構。從代碼庫中提取共享代碼,並有兩個引用共享代碼的獨立應用程序,或者從代碼庫中提取不同的代碼,並有一個應用程序根據某些應用程序配置動態加載特定於站點的庫。 – David
謝謝@戴維。我真的很同意這一點,這是我們迄今爲止選擇的方式(例如通過將共享代碼移動到npm模塊)。但重構需要的時間很長,因爲我們有破解經過時間檢驗的代碼的風險。我真的很想使用一個工具(git here)來幫助緩慢,安全和精心策劃的重構工作。我們希望保持一個系統完好無損,只需更換其他系統,但當然會傳播任何修復程序。但是,也許,如你所說,這不是一條好路徑。無論如何,感謝您的評論。 – avejidah
這確實是一個標準的商業問題。技術債務多年來一直在積累,團隊一起決定「以後再處理」。歡迎來到以後:)在這一點上的選擇是承擔成本並糾正現在的問題,或者增加更多的技術債務,並在以後以更高的成本「處理它」。這兩種方法都是有效的方法,取決於風險和成本的權衡。 – David