當前位置: 華文星空 > 知識

為什麽有人可以在屎一樣混亂的幾千行程式碼裏加功能?不重構能駕馭屎山嗎?

2021-11-19知識

因為加功能和重構完全是不一樣的。

我記得有另外一個問題是問:為什麽有人說只要程式碼能執行就不要去碰它。

這恰恰就是說的這種情況。

屎山本身內部在維持一個微妙的平衡,很多地方都是正好只有這一個點是OK的,你稍微改一下就稀裏嘩啦如同多米諾骨牌一樣的結果。

但是這很多時候並不妨礙你加東西。你只需要註意不要去改變原來的結構就是了。

這就好像作業系統在執行屎山的時候,也能並列執行其它任務一樣。

對於屎山,你需要做的就是盡量將你新加的加在外部,而不是內部。

舉個例子,微軟的office很多後面加的功能,其實都是類似於執行VBA,也就是用指令碼模仿使用者手動操作,而不是直接改內部邏輯。

所以很多操作很慢。但是能用,這就OK了。

同樣的功能在google docs裏面,很可能就會輕量很多,雖然那是用網頁+手稿語言寫的。

易利信有位工程師,搞了一套所謂面向方面的編程(AOP),就是改編譯器,在每個函式的入口和出口自動插入勾點(跳轉點)。這樣加功能的時候,就不必動原本的結構,只是hook出去跑新的程式碼,然後再hook回來。

頗有防毒軟體是如何監視其它軟體執行的味道。防毒軟體都不需要改你的程式,就可以改變你的程式的很多行為。

但是重構。。。那就完全不是這麽一回子事情了。大部份時候是,牽一發動全身,稀裏嘩啦碎了一地,然後決定另起爐竈。但是已有的生意不能停,新的生意也要做,所以最後就變成半新半舊:一座新的屎山產生了。