Java 在哪里实例化简单值/实体对象?DDD
使用领域驱动设计,简单的价值对象/实体在哪里实例化 例如,如果我需要在服务类中创建一个简单的值对象,我会调用值对象的类上的新操作符,将其耦合到服务类吗 根据域驱动设计,可以在服务类中调用新操作符吗Java 在哪里实例化简单值/实体对象?DDD,java,design-patterns,domain-driven-design,design-principles,Java,Design Patterns,Domain Driven Design,Design Principles,使用领域驱动设计,简单的价值对象/实体在哪里实例化 例如,如果我需要在服务类中创建一个简单的值对象,我会调用值对象的类上的新操作符,将其耦合到服务类吗 根据域驱动设计,可以在服务类中调用新操作符吗 这些值对象不能通过DI容器注入,并且由于其简单性,它们不保证使用工厂。直接从构造函数实例化它们有什么错 通常,只有当实例化过程很复杂时,或者当您想让客户机不再选择具体的类时,才需要工厂 然而,由于普遍存在的语言在DDD中是至关重要的,因此聚合将有工厂方法来创建与之相关的其他聚合是很常见的 例如,不要像
这些值对象不能通过DI容器注入,并且由于其简单性,它们不保证使用工厂。直接从构造函数实例化它们有什么错 通常,只有当实例化过程很复杂时,或者当您想让客户机不再选择具体的类时,才需要工厂 然而,由于普遍存在的语言在DDD中是至关重要的,因此聚合将有工厂方法来创建与之相关的其他聚合是很常见的 例如,不要像下面这样凭空生成项目任务:
var task = new Task(projectId, ...);
你可以做:
var task = project.addTask(...);
这将更好地表达“任务可以添加到项目”用例,代价是必须加载
项目聚合。直接从其构造函数实例化它们有什么错
通常,只有当实例化过程很复杂时,或者当您想让客户机不再选择具体的类时,才需要工厂
然而,由于普遍存在的语言在DDD中是至关重要的,因此聚合将有工厂方法来创建与之相关的其他聚合是很常见的
例如,不要像下面这样凭空生成项目任务:
var task = new Task(projectId, ...);
你可以做:
var task = project.addTask(...);
这将更好地表达“任务可以添加到项目”用例,代价是必须加载项目聚合。直接从其构造函数实例化它们有什么错
通常,只有当实例化过程很复杂时,或者当您想让客户机不再选择具体的类时,才需要工厂
然而,由于普遍存在的语言在DDD中是至关重要的,因此聚合将有工厂方法来创建与之相关的其他聚合是很常见的
例如,不要像下面这样凭空生成项目任务:
var task = new Task(projectId, ...);
你可以做:
var task = project.addTask(...);
这将更好地表达“任务可以添加到项目”用例,代价是必须加载项目聚合。直接从其构造函数实例化它们有什么错
通常,只有当实例化过程很复杂时,或者当您想让客户机不再选择具体的类时,才需要工厂
然而,由于普遍存在的语言在DDD中是至关重要的,因此聚合将有工厂方法来创建与之相关的其他聚合是很常见的
例如,不要像下面这样凭空生成项目任务:
var task = new Task(projectId, ...);
你可以做:
var task = project.addTask(...);
这将更好地表达“任务可以添加到项目”用例,而代价是必须加载项目聚合。这与域驱动设计有什么关系?你的问题不清楚。为什么不在相关的类中实例化这些值呢?请给我们看一些代码和/或示例。不清楚。我会编辑它。但是,我想要一个松散耦合的设计,所以我不能直接在使用它们的方法中实例化它们,我需要将它们传入。因此,如果它们是基本对象而不是保证工厂使用的复杂聚合,我需要知道在哪里实例化它们。这与域驱动设计有什么关系?你的问题不清楚。为什么不在相关的类中实例化这些值呢?请给我们看一些代码和/或示例。不清楚。我会编辑它。但是,我想要一个松散耦合的设计,所以我不能直接在使用它们的方法中实例化它们,我需要将它们传入。因此,如果它们是基本对象而不是保证工厂使用的复杂聚合,我需要知道在哪里实例化它们。这与域驱动设计有什么关系?你的问题不清楚。为什么不在相关的类中实例化这些值呢?请给我们看一些代码和/或示例。不清楚。我会编辑它。但是,我想要一个松散耦合的设计,所以我不能直接在使用它们的方法中实例化它们,我需要将它们传入。因此,如果它们是基本对象而不是保证工厂使用的复杂聚合,我需要知道在哪里实例化它们。这与域驱动设计有什么关系?你的问题不清楚。为什么不在相关的类中实例化这些值呢?请给我们看一些代码和/或示例。不清楚。我会编辑它。但是,我想要一个松散耦合的设计,所以我不能直接在使用它们的方法中实例化它们,我需要将它们传入。因此,如果它们是基本对象,而不是保证使用工厂的复杂聚合,我需要知道在哪里实例化它们。我想知道在哪里创建简单的值对象。我知道它们可以从存储库中创建,并由应用程序的客户端传入,但是当我的服务需要创建它们自己的服务时呢?我如何在不紧密耦合类的情况下执行此操作?如果它们是如此简单以至于一个工厂会被过度使用,那么我应该在哪里创建它们呢?它们不能通过DI容器注入,因为它们是值对象。@Bojs我真的不明白你说的where是什么意思?您只需在需要它们的地方实例化它们。您所问的问题与我在应用程序中在何处创建字符串、整数、日期等相同。。。这毫无意义。显然,您将与VOs紧密耦合。这是符合领域驱动设计的标准实践吗?你有什么可以分享到网上材料的链接吗?@Bojs你的问题太不清楚了。有什么困扰