使用领域驱动设计,简单的值对象/实体在哪里实例化?
例如,如果我需要在服务类中创建一个简单的值对象,我是否只需在值对象的类上调用 new 运算符,将其耦合到服务类?
可以根据领域驱动设计在服务类中调用新的运算符吗?
这些值对象无法通过 DI 容器注入(inject),而且由于其简单性,它们不保证使用工厂。
最佳答案
直接从构造函数实例化它们有什么问题?
通常,只有当实例化过程很复杂或者您想要减轻客户端选择具体类的负担时,您才需要工厂。
但是,由于通用语言在 DDD 中至关重要,因此聚合具有工厂方法来创建与其相关的其他聚合是很常见的。
例如,而不是像下面这样凭空生成项目任务:
var task = new Task(projectId, ...);
你可以这样做:
var task = project.addTask(...);
这可以更好地表达“任务可以添加到项目中”用例,但代价是必须加载 Project
聚合。
关于java - 在哪里实例化简单值/实体对象? DDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250586/