值对象与DTO
值对象VALUE OBJECT VS. DATA TRANSFER OBJECT (VO VS. DTO)
J2EE Core J2EE Patterns J2EE核心模式中对DTO和VO定义使人容易误解,一篇博客专门写了一篇两者对比文章,正是我本人想说的:
1. DTO只是愚蠢的数据容器,用于在层之间进行数据传送。它主要包含的属性。实际上,您甚至可以直接使用公共属性,无需任何set/get方法,但是这可能会造成太多的会议和讨论:-) 。 DTOs是贫血,一般不包含任何业务逻辑。 DTOs往往java.io.Serializable -其唯一的需要,就是如果你需要在跨JVM之间传输数据。
2.值对象代表本身就是一个固定的一组数据和类似于Java的枚举。值对象没有任何身份,是不可改变的。一个真实的世界将是Color.RED例如, Color.BLUE , SEX.FEMALE等(注:这与Evans DDD中定义值对象是一致的)
值对象和DTO被大量过度使用,属于无人看管方式,造成系统的复杂性,大多数使用值对象概念其实心里是在使用DTO。这个现象必须克服。
banq注:唯一克服的办法就是使用DDD领域建模,确定模型群,划分边界,让值对象附属于实体根。
http://www.adam-bien.com/roller/abien/entry/value_object_vs_data_transfer