🎯 什麼情境該想到我
當你只在乎「這個東西的值是什麼」、完全不在乎「它是不是同一個」時——例如金額 100 元、座標 (25.0, 121.5)、一段日期範圍——就把它做成沒有識別、不可變的值物件。
⚙️ 怎麼用(步驟 / 公式)
意圖:用屬性值來描述領域概念,物件本身無識別、不可變、可自由替換與共享。
- 確認它由屬性值定義、沒有需要追蹤的身分。
- 設計成不可變:所有屬性建立後不再改動,要「變」就產生一個新的值物件替換掉舊的。
- 相等性(equals)比對所有屬性值——值全相同即視為相等、可互換。
- 把相關的驗證與計算行為(如金額相加、範圍是否重疊)封裝進去,讓它成為有行為的小物件。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 若你需要追蹤「同一個」隨時間演變,那應該是實體,不是值物件。
- 不可變是關鍵:一旦允許就地修改,共享的值物件會在別處被改壞。
- 別為省事把該有身分的東西降級成值物件而弄丟了生命週期追蹤。