将引用对象改为值对象

《重构改善既有代码的设计》8.4 Change Reference to Value中提到:

如果你以Money类表示“钱”的概念,其中有“币种”和“金额”两条信息,那么Money对象通常是一个不可变的值对象。这并不意味着你的薪资不能改变,而是意味:如果要改变你的薪资,就需要使用另一个Money对象来取代现有的Money对象,而不是在现有的Money对象上修改。你和Money对象之间的关系可以改变,但Money对象自身不能改变。

考虑到分布式/并发系统中,值对象需要保持原子性,不然会有同步问题。在以往Linux C语言开发过程中,经常遇到存储配置参数的结构体,更新配置时的做法通常是新生成一个保存有最新配置的结构体,将全局配置指针指向该新结构体,原配置结构体及时释放;配置变更时只有一个指针的变化,即使使用锁机制也不会占用太多时间。这与书中提到的不可变的值对象有异曲同工之妙。

如无特殊说明,文章均为本站原创,转载请注明出处
源自: 王明军的博客
本文链接地址: 将引用对象改为值对象
广告

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.