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