值对象是不可变的?

值对象是不可变的是不是指值对象的属性不可更改想JAVA的STRING不变类一样?那为啥ForumThreadState中有setXXX()的方法呢?

值对象是不是就是不变类的对象?

值对象是不是就是不变类的对象?

为啥不把ForumThreadState设计成不变类呢?属性都是FINAL的,从数据库中读出数据后直接用构造函数设值,这样不是更彻底的不变吗?

只有GET方法没SET方法
[该贴被r7raul于2008-04-10 14:24修改过]

好。。。。。。。。

我看了论坛刷新的时候每次都NEW 了一个forumState,为啥不共享一个forumState呢?还有forumState不需要持久化到数据库中,它的生命周期啥时候结束?与客户类的值对象地址有啥区别?值对象地址是要持久化的?

1.刷新是一个技术上的要求和共享的语义不一样。
2.forumState的生命周期不同于forum,随时都有可能结束 并生成新的forumstate.
3.值对象和持久到数据库中没有多少关系。只要注意new 完后更新一次后不再更新
4.值对象共享结合Flyweight。

5.如果有共享要求,像forumState一样存在多个属性的话不利于共享 ?

pub基本正确

值对象不可变的意思和主要指其生命周期的一致性,并不是说技术上不能修改