IDDD 6 ValueObject 发表于 2014-07-27 | 分类于 Art << 实现领域驱动设计 >> 六: 值对象值对象易于开发、测试和维护。 尽量使用值对象来建模,而不是实体。 MindMapping Source:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152* 值对象** 特征*** 度量或描述 度量或描述领域中的一件东西*** 不变性**** 只读,创建后不改变**** 只通过构造函数赋值*** 概念整体**** 整体值对象 (Whole Value aka Value Object)*** 可替换性*** 相等性*** 无副作用行为**** 无副作用函数 (Side-Effect-Free Function)** 最小化集成*** 更少的职责假设** 表示标准类型*** Java里可用枚举来表示** 测试*** TDD** 实现*** 2个构造函数**** 1.接受所有参数的**** 2.浅复制其他值对象的 (Shallow Copy)** 持久化*** 拒绝数据建模泄露**** 数据建模式次要的 根据领域模型来设计数据模型, 而不是根据数据模型来设计领域模型*** 与ORM**** 单个值对象***** 直接映射**** 保存多个值对象***** 序列化到单个列****** 缺点******* 列宽限制 MySQL Varchar limit :65535******* 不能查询 其内在属性不能作为SQl查询条件******* 需自定义类型***** 使用数据库实体****** 缺点******* 对象-关系抗阻***** 使用联合表****** 缺点******* 需满足数据库范式******* 每一个属性都不应该为NULL******* 不能包含嵌套的集合**** 枚举状态对象