在哪里实例化简单值/实体对象? DDD

时间:2015-10-21 03:46:43

标签: java design-patterns domain-driven-design design-principles

使用域驱动设计,实例化的简单值对象/实体在哪里?

例如,如果我需要在服务类中创建一个简单的值对象,我是否只需要在值对象的类上调用new运算符,将其与服务类耦合?

可以根据域驱动设计在服务类中调用new运算符吗?

这些价​​值物品不能通过DI容器注入,因为它们简单,所以不保证使用工厂。

1 个答案:

答案 0 :(得分:3)

直接从构造函数中实例化它们有什么问题?

通常,当实例化过程很复杂或者想要减轻客户选择具体类时,您只需要工厂。

然而,由于无处不在的语言在DDD中至关重要,因此聚合将具有工厂方法来创建与其相关的其他聚合,这是非常普遍的。

例如,不要像下面那样凭空产生项目任务:

var task = new Task(projectId, ...);

你可以这样做:

var task = project.addTask(...);

这表示"任务可以添加到项目"更好地使用案例,代价是必须加载Project聚合。