Value Object in Symfony

看了这篇文章 ,接触到一个概念, value object. 所谓value object是用来保存value的一种对象。这种对象的几个主要特征是

关心值本身而不是基于id的

不可变 (immutable). 意思就是说,只有getter方法, 没有setter等等可从外边改变该对象的方法。该对象的值在创建对象的时候通过构造函数就被确定了,且不能再被修改了。

使用场景

在symfony的form里,用户通过表单提交来创建一个新的value object. 当用户通过表单编辑对象的时候,本能的会想到调用setter方法来修改对象。但是这会失败,因为value object没有setter方法。 这时候需要实现额外的interface,来实现这些个功能。最后在Type (关于symfony的form type是另外一个抽象概念,看文档)里面,把这个方法设置为formBuilder的DataMapper方法。