寫出好維護的程式碼 — 透過模組化設計降低軟體複雜度

2025年10月22日

💎 加入 E+ 成長計畫 與超過 750+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源

要寫出好維護的程式碼,其中一個關鍵是讓維護程式碼的人,在面對要維護的程式碼時,不需要面對整個程式碼的系統,而是只需要面對其中的一小部分。當面對某段自己沒碰過的程式碼,如果該程式碼段落很長,就會讓人要花比較多時間去理解;反之,假如該段落有好的抽象化,可以讓維護者不用關注過於細節的內容,這樣讀起來會比較容易,也會讓整體的可維護性提高。

從比較技術面的角度來談,上面講的就是「模組化設計 modular design」的精髓。在這篇文章,我們會來詳談什麼是模組化設計,以及在做模組化設計時,有什麼要注意的重點。

模組化設計是什麼?

如開頭談到,模組化設計是把龐大的程式拆解成不同的模組,這些模組彼此獨立,然後當要執行程式時,再把需要的模組整合在一起。這樣可人維護者不用一次面對整個系統的複雜度,而是僅用面對單一模組的複雜度。

具體來說,我們在寫程式時會用到的類別、函式,或者任何被抽象化的子系統,都可以算是模組。讓我們透過一個例子,讓大家實際感受一下模組化帶來的意義與好處。

相信絕大多數做前後端開發的工程師,在工作上或多或少用過 JSON.stringify 這個方法。這個方法是在 JSON 物件底下,用來把某一個值轉為 JSON 字串的方法。

以下是在 MDN 文件中的範例

console.log(JSON.stringify({ x: 5, y: 6 }));
// 會變成 '"x":5,"y":6'

console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
// 會變成 '"2006-01-02T15:04:05.000Z"'

從模組化的角度來看,JSON 物件本身是一個模組,而該模組能讓開發者在使用時,免於接觸到 JSON 這個非常複雜的系統。

相信多數用過 JSON.stringify 方法的讀者,大概都會覺得這是一個很簡單的方法,我們只要把任何值丟進去,就能被轉為一個 JSON 字串。但實際上,這個 JSON.stringify 在背後幫我們處理了非常多東西。感興趣的讀者,推薦可以到 json.org 這個網站看一個 JSON 物件背後的細節,會發現可能遠比你想像的複雜。

就以 JSON.stringify 來說,在做這個字串化的過程,這個方法需要

  • 先檢查值是否是有效值 (例如假如是否沒有循環引用、有沒有副作用)
  • 需要對不同值做特別處理 (例如假如是一般字串,要把跳脫字元 \n 處理好)
  • 如果是某個物件,需要遞回式地走過並且對其中的每個值做特別處理
  • 把處理好的結果,用 JSON 字串規格的格式輸出

上面這些,都只是處理字串化本身要做的事情。在這個過程中,還有許多可以去做效能優化的地方,處理起來會變得特別複雜。先前 Google 的 V8 團隊就有寫一篇《How we made JSON.stringify more than twice as fast》在談他們把這個方法加速兩倍的細節,背後有非常多大家可能想都沒想到的事,在 V8 那一端被處理掉。

上面講了那麼多,最關鍵想要談的就是模組化。試想,假設今天沒有模組化,大家要把某個值轉成 JSON 字串,要先把我們上面談的這些細節先實作出來,這樣會有多讓人感到崩潰。因為有模組化,我們在面對 JSON.stringify 時,只需要簡單地傳入一個值,然後呼叫它;而不需要去面對上面講的那些繁瑣的細節或效能優化。

回到上面對模組化的定義,透過模組,我們把一個系統拆成不同的小部分,讓面對程式碼的維護者,需要去顧及的範圍不再是整個系統,這樣能讓維護起程式碼庫,變得輕鬆非常多。

模組化設計的核心要素

在透過具體的案例,了解模組化是什麼之後,接著讓我們來談模組化設計的核心要素。

稍微觀察一下,上面提到的例子當中的模組,我們可以把它分解成兩個部分來看,一個是介面 (interface),另一個是實作(implementation)。介面在做的事情是去描述一個模組要如何使用,要如何跟這個模組互動。而實作的部分則是,這個模組是如何透過程式碼實作出來的細節。

進一步來談,介面就像這個模組的使用說明書,以函式來說,一個函式的的介面就會包含接收哪些參數,以及最後會有什麼樣的輸出。所以對於維護程式碼的開發者來說,介面就是在使用該模組時,唯一需要知道的資訊。當然,可能有時候在使用模組時,會需要一些額外的說明 (例如透過註解或者文件),這時候這些額外的說明,會被稱為非正式介面(informal interface)。

而實作則是該模組實際的程式碼,但這部分也是維護者相對來說不需要關注的部分。就以上面談到的 JSON.stringify 來說,維護者在用的時候只需要知道介面,不用知道背後那些複雜的實作細節。也因為這點,可以讓維護者變得輕鬆。

閱讀更多

關於上面提到的點,如果想做好模組化設計,還有其他要關注的重點,我們在 E+ 成長計畫的主題文有更深入的討論,感興趣的讀者,歡迎加入 E+ 閱讀 (連結)。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們