動機(Motivation)
在分布系統和并發系統中,不可變的value object特別有用,因為你不須考慮它們的同步問題。
value object有一個非常重要的特性:它們應該是不可變的(immutable)。無論何時只要你調用同一個對象的同一個查詢函數,你都應該得到同樣結果。如果保證了這一點,就可以放心地以多個對象表示相同事物(same thing)。如果value object是可變的(mutable),你就必須確保你對某一對象的修改會自動更新其他[代表同事物]的其他對象。這太痛苦了,與其如此還不如把它變成reference object。
這里有必要澄清一下[不可變(immutable)]的意思。如果你以Money class表示[錢]的概念,其中有[幣種]和[金額]兩條信息,那么Money對象通常是一個不可變的value object。這并非意味你的薪資不能改變,而是意味:如果要改變你的薪資,你需要使用另一個嶄新的Money對象來取代先有的Money對象,而不是在現有的Money對象上修改。你和Money對象之間的關系可以改變,但Money對象自身不能改變。