动机(Motivation)
在分布系统和并发系统中,不可变的value object特别有用,因为你不须考虑它们的同步问题。
value object有一个非常重要的特性:它们应该是不可变的(immutable)。无论何时只要你调用同一个对象的同一个查询函数,你都应该得到同样结果。如果保证了这一点,就可以放心地以多个对象表示相同事物(same thing)。如果value object是可变的(mutable),你就必须确保你对某一对象的修改会自动更新其他[代表同事物]的其他对象。这太痛苦了,与其如此还不如把它变成reference object。
这里有必要澄清一下[不可变(immutable)]的意思。如果你以Money class表示[钱]的概念,其中有[币种]和[金额]两条信息,那么Money对象通常是一个不可变的value object。这并非意味你的薪资不能改变,而是意味:如果要改变你的薪资,你需要使用另一个崭新的Money对象来取代先有的Money对象,而不是在现有的Money对象上修改。你和Money对象之间的关系可以改变,但Money对象自身不能改变。