DDD构建一个包含集合属性的值对象

时间:2015-04-02 08:55:17

标签: php domain-driven-design traversal value-objects

我在构建一个值对象时有一个简单的问题,在该对象中有一个具有特定类型的值对象集合,您如何构造该对象?

举一个例子,假设你有picture多个dimensions

选项1:

Class Picture implements valueObject{

    public function __construct(array $dimensions){
        foreach($dimensions as $dimension){
                // check if instance of `dimension` value object
        }
    }
}

选项2:

Class Picture implements valueObject{

    public function __construct(DimensionCollection $dimensions){

    }
}

Class DimensionCollection implements Traversable{

    public function add(Dimension $dimension){
        // add to array 
    }
}

选项二off-course似乎更合乎逻辑但是还有另一种模式,最好从DDD中采取这种做法吗?

1 个答案:

答案 0 :(得分:0)

如果你的Picture VO拥有一个集合..然后我将它命名为Pictures或PictureCollection,因为它将由其他Picture对象组成。 (正如您对尺寸所做的那样)。

虽然这是一个复习问题,valueObject接口应该命名为“ValueObjetct”,大写字母为“V”。

我认为您的域名需要进行一些重组。如果图片的尺寸大于尺寸,则“s”应该是由尺寸VO组成的组。