值对象到底有什么作用?

09-03-27 pliaozrlp

在阅读DDD过程中出现几个疑问:
1.值对象到底有什么作用?为什么不把它的值直接设置成为实体的属性呢?
2.值对象在数据库映射的时候该怎么处理?当成实体表中的字段?还是单独一张表呢?

望各们帮我解答下!

pliaozrlp
2009-03-30 15:38

怎么都没人回答的?是不是问题太简单了?

spikeme
2009-04-19 13:31

建议看看VO,PO,POJO,DAO等的区别。
VO就是你说的值对象,主要用于业务层保存数据用的。PO主要是持久层用的。PO对象对应数据库数据表中的一条记录,与数据库数据的状态是同步的。PO只是数据需要持久化到持久化设备中的时候才用的。一般来说,我们在保存数据时,先将VO转换成PO。楼主可以在网上搜索下相关资料。

yinyousong
2009-04-20 21:17

值对象主要是将其做为值(值具有不变性)来考虑,也就是说是对象的说明补充物。
从思考的角度来讲,区分值对象有助我们把握领域的核心,实体才具有和别的实体通信的能力,值对象便不具有,也就是中值对象降低了对象之间的关联.

从设计的角度来讲,值对象是不变的,不变意味着不需要同步,当系统变大时,也就是说当系统变成分布式系统时,值对象对提升性能很有帮助.将分布式对象同步是比较费力的一件事.

spikeme所言的VO与DDD所讲的VO不是同一件东西。他所说的VO是指:当我们需要把领域对象暴露给表现层时,将所要呈现的数据从领域的几个对象中抽取出来,然后封装成对象传递给表现层.