「既然都講了耦合度,乾脆也講講内聚度Cohesion吧。」蕭凱琪興致一來,索性乘勝追擊。
「那又是什麼?」勇者突然覺得自己弱小無助可憐。
蕭凱琪沒有馬上回答,而是換了個話題:「你猜猜如果一個工程師解決了手上所有被指派的任務,下一步他會做什麼?」
勇者不知道蕭凱琪這個問題想要什麼答案,但還是認真說出他的猜測:「協助其他同事?」
蕭凱琪眉眼彎彎,笑得十分開心:「不不不,是重構程式碼!」說完她又再次強調:「不是重寫程式碼唷!」
蕭凱琪知道勇者不清楚兩者差異,於是她解釋了一下:「重構程式碼是在不破壞目前功能的情形下,將程式碼變得更好擴展和維護,是對未來的投資。通常會試著提高內聚度,將分散四處的相關功能整理在一起。」
「相關的功能不是本來就在一起嗎?怎麼會分散四處?」勇者困惑的說。
蕭凱琪搖頭:「大型專案由多人負責,他們可能會各自為政。此外,當專案經歷的時間越長,能熟知整個專案的人就越少。很可能加新功能的時候,不知道已經有類似的功能存在,或是有可以引用的部分。」
「那也只是多花點時間寫新功能。整理更浪費時間吧?」勇者不明白重構程式碼的必要性。
蕭凱琪冷冷回應:「如果你是剛接手的人,需要把功能修好,而這功能分散在各個檔案,甚至你不清楚一堆新舊功能中哪個才是出錯的目標功能。你還會覺得重構只是浪費時間嗎?」大概是覺得自己有點兇了,蕭凱琪換了個溫和的口氣繼續說:「如果一開始就有規劃好程式架構,用模組化的方式設計,並規劃好重構、測試的週期,那麼每次重構都不會需要太多時間和心力。」
蕭凱琪拍了拍勇者的肩膀:「當然,做為超級新人,應該是沒人敢讓你一個人負責重構,一定會請其他人來幫忙檢查和給建議,如果公司沒有幫新人做Code Review,這產品很危險啊——對使用者來說。」