如果有任何問題或建議,歡迎隨時聯繫我:
在過去的 28 天裡,我們學習了如何建構功能、管理狀態、編寫測試、優化效能。我們已經掌握了「讓功能動起來」的各種技能。
但軟體開發還有另一面,同樣重要,卻常常被忽略:如何讓程式碼在未來依然容易被理解、修改和擴展? 這就是「可維護性 (Maintainability)」。
想像一下你家的廚房。當你為了趕時間,匆匆忙忙地做完一頓飯,可能就把用過的鍋子、盤子隨手一放,心想「等等再來收」。一次兩次還好,但如果每天都這樣,一週後,你的廚房就會變成一個油膩、混亂、讓你完全不想走進去的災難現場。在這樣的廚房裡,即使只是想簡單地下個麵,都會變得很困難。
程式碼也是一樣。在專案初期、在趕死線的壓力下,我們常常會寫一些「能動就好」的程式碼。這些權宜之計,就是「技術債 (Technical Debt)」。債務會累積,利息會增長,最終會讓整個專案的開發速度變得極其緩慢,每一次小小的修改都伴隨著巨大的痛苦和風險。
而「重構 (Refactoring)」,就是定期清理和整理你那混亂廚房的過程。它是一項紀律,是專業開發者對抗混亂、保持程式碼品質的關鍵武器。
軟體工程大師 Martin Fowler 給了它一個經典定義:
重構,是在不改變軟體外部行為的前提下,修改其內部結構,以提高其可理解性,並降低其修改成本的過程。
簡單來說,重構就是:
重構的底氣從何而來? 來自我們前幾天學的「自動化測試」!一個覆蓋率良好的測試套件,就是你進行重構時最大的安全網。它能確保你在大刀闊斧地修改內部結構時,沒有意外破壞任何外部功能。
「壞味道」是程式碼中一些顯而易見的警訊,它們暗示著底下可能存在更深層的設計問題。讓我們來看看在 Vue 專案中幾種常見的壞味道,以及如何「除臭」。
.vue
檔案超過 500 行,甚至上千行。它像一頭巨獸,掌管著資料獲取、複雜的表單邏輯、多種狀態管理、還有超長的 HTML 模板。useXXX.js
的 Composable 函式 (我們在 Day 10 學過)。user
物件,從 App.vue
-> Layout.vue
-> Page.vue
-> UserProfile.vue
,一層一層地透過 props 往下傳。中間的 Layout
和 Page
元件本身根本不需要 user
,它們只是充當「快遞員」。provide
在祖先元件提供資料,在任何後代元件中用 inject
來注入。這比 props 簡潔,但會讓資料流動變得不那麼明確,需謹慎使用。if (order.status === 3) { /* ... */ }
const notificationType = 'success';
element.style.color = '#1976d2';
3
是什麼意思?已出貨?已完成?),且難以維護(如果狀態碼要從 3
改成 4
,你需要在整個專案中搜索替換)。// src/constants.js
export const ORDER_STATUS = {
PENDING: 1,
PROCESSING: 2,
SHIPPED: 3,
DELIVERED: 4,
};
// 在元件中
import { ORDER_STATUS } from '@/constants';
if (order.status === ORDER_STATUS.SHIPPED) { /* ... */ }
src/utils
資料夾下的共用函式。computed
),那麼 Composable 就是它最好的歸宿。status: 2
, type: 'admin'
)。嘗試將它們提取到一個 constants.js
檔案中,並用有意義的名稱取代它們。今天,我們探討了軟體品質的核心——可維護性。寫出能動的程式碼是基本,寫出能讓半年後的自己和同事都能輕鬆看懂和修改的程式碼,才是一種專業。
良好的程式碼結構,就像一個乾淨整潔的廚房,它能讓你享受烹飪(開發)的樂趣,而不是在混亂中掙扎。這也是我們作為專業工程師,寫給未來的自己和團隊的一封最溫柔的信。
明天,我們將迎來這次鐵人賽的最後一天,讓我們一起總結 Vue 的開發最佳實踐,並展望它的未來與生態系。
重構 (Refactoring)
可維護性 (Maintainability)
技術債 (Technical Debt)
壞味道 (Bad Smells)
臃腫的元件 (Bloated Component)
Props 逐層傳遞 (Prop Drilling)
Provide / Inject
神秘的字串/數字 (Magic String/Number)
提取元件 (Extract Component)
提取邏輯 (Extract Composable)