领域模型是属于值对象还是实体,有时并不是非常清晰,实际中也没有明确的指标可以依靠。值对象还是实体完全取决于它们所处的问题域。Money类在我们的例子中是一个值对象,但放到线上商城中这样的问题域中,它就是类似订单的对象,此时Money就是实体。还是回归之前的观点——可替换的对象很大概率是值对象。
    image.png
    另一个方法是将值对象比作整形数字。很明显value15value25是没有区别的,所以整形是值对象。类似的,如果对象可以视作整形,那么它就是值对象。
    image.png
    值对象的优先级总是高于实体的。值对象不可变且比实体更轻量化。因此值对象异常简单且完美地适用于将业务逻辑放置其中。实体在这种情况下更多地是扮演一个包装器角色,同时侧重发送更高级指令。对象在初期可能是实体,但随着进度推进,它极有可能转变为值对象。例如,Address类在系统构建初期是实体,拥有ID字段和单独的数据库表,随着业务推进,Address类实际上行使的是值对象的功能,此时,毫不犹豫地将它重构为值对象。