有幾筆資料老是成群結隊出現——同一組欄位在多個類別現身、同一串參數在多個函式簽章裡反覆出現。它們其實想成為一個物件。
🧠 Why It's a Problem
- 重複的資料結構:同一組欄位散落各處,只要多加一欄,就得到處補上。
- 缺少一個概念:這群資料其實代表一個領域概念,卻沒有名字、沒有型別把它收攏起來。
- 本章把它歸在資料與變數管理——資料的範圍與型態管理不當,是導致系統脆弱的主因。
NOTE
對應重構是把這群資料提取為獨立類別(Extract Class);當它們是出現在參數列裡時,可以先做 Parameter Object。
⚖️ Refactoring
Extract Class:辨認出總是綁在一起的那組資料,替它建一個有名字的類別。
前 — 座標四個值到處一起傳
function distance(x1, y1, x2, y2) {
return Math.hypot(x2 - x1, y2 - y1);
}
function midpoint(x1, y1, x2, y2) {
return { x: (x1 + x2) / 2, y: (y1 + y2) / 2 };
}x 和 y 永遠一起出現,卻永遠是兩個裸值。
後 — 提取成一個有名字的類別
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
function distance(a, b) {
return Math.hypot(b.x - a.x, b.y - a.y);
}
function midpoint(a, b) {
return new Point((a.x + b.x) / 2, (a.y + b.y) / 2);
}Point 這個概念終於有了名字;簽章變短,之後跟座標相關的行為也有地方可放。
🔑 Takeaways
- 資料泥團的訊號是同一組資料總是成群出現(在欄位裡、在參數列裡)。
- 標準解是 Extract Class:替這群資料建一個有名字的類別;在參數列時可先做 Parameter Object。
- 收攏之後不只簽章變短,這個新概念也成了日後放置相關行為的家。
No notes yet — jot your takeaways or Q&A here.