Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在哪里实例化简单值/实体对象?DDD_Java_Design Patterns_Domain Driven Design_Design Principles - Fatal编程技术网

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你的问题太不清楚了。有什么困扰