Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Domain driven design 调用域服务的基础结构存储库_Domain Driven Design_Ddd Repositories_Ddd Service - Fatal编程技术网

Domain driven design 调用域服务的基础结构存储库

Domain driven design 调用域服务的基础结构存储库,domain-driven-design,ddd-repositories,ddd-service,Domain Driven Design,Ddd Repositories,Ddd Service,我有一个应用程序服务(AppService)和一个从外部数据提供者读取数据的基础设施存储库(InfraRepo)。AppService调用InfraRepo并将数据返回给客户端。 我有以下要求:我有一些过滤条件和业务逻辑。为此,我创建了一个域服务(DomainService),并将其注入InfraRepo。一旦我从外部数据提供者(在InfraRepo中)检索到数据,我就调用域服务,将数据传递到那里,然后返回结果。然后,我将结果返回给映射到Dto并返回给客户端的应用程序服务。 在基础设施存储库中调

我有一个应用程序服务(AppService)和一个从外部数据提供者读取数据的基础设施存储库(InfraRepo)。AppService调用InfraRepo并将数据返回给客户端。 我有以下要求:我有一些过滤条件和业务逻辑。为此,我创建了一个域服务(DomainService),并将其注入InfraRepo。一旦我从外部数据提供者(在InfraRepo中)检索到数据,我就调用域服务,将数据传递到那里,然后返回结果。然后,我将结果返回给映射到Dto并返回给客户端的应用程序服务。
在基础设施存储库中调用域服务是否正确。

与其讨论纯粹的DDD,我们似乎可以在一次讨论中把几个概念放在一起讨论这个问题,并强调每个概念的好处

根据您对DDD的熟悉程度,本文提供了DDD的良好概述。它将DDD构建块称为:实体、值对象、聚合(根)、服务、存储库和工厂。问题中讨论了服务和存储库。没有讨论实体或价值对象;因此,我不确定存储库返回的数据

这些元素如何交互可以通过讨论的洋葱架构来解决。在这种情况下,它指出域应该是核心,然后是域服务,然后是应用程序服务,最后是外层,即UI、测试和基础设施。在此模型中,数据访问(存储库)是基础设施。因此,关键是依赖关系从外层流向内层;也就是说,域不依赖于自身以外的任何东西。这与传统的三层体系结构形成对比,在传统的三层体系结构中,一切都依赖于数据访问代码,业务代码位于UI和数据访问代码之间。洋葱架构会说存储库(InfraRepo)属于外层,应用程序服务属于下一层,域服务属于下一层。因此,AppService永远不会调用InfraRepo,因为控制永远不会流向外层,只能从外层传入。相反,AppService将调用DomainService,DomainService将调用域(即业务逻辑)。域将利用它为数据访问定义的抽象(接口或纯虚拟类)。InfraRepo将实现此抽象,理想情况下,域类将使用IoC容器来获取InfraRepo实例,同时只知道接口。也就是说,IoC容器的作用类似于DDD构建块中的上述工厂


原则已经存在了一段时间,它处理类设计的更精细方面,以允许灵活和健壮的代码。在这种情况下,依赖倒置原则可以通过IoC容器实现,作为其使用的附加参数。此外,存储库接口的定义应牢记接口分离原则。

与纯粹讨论DDD相比,我们似乎可以在讨论中将几个概念放在一起,以解决这个问题,并强调每个概念的好处

根据您对DDD的熟悉程度,本文提供了DDD的良好概述。它将DDD构建块称为:实体、值对象、聚合(根)、服务、存储库和工厂。问题中讨论了服务和存储库。没有讨论实体或价值对象;因此,我不确定存储库返回的数据

这些元素如何交互可以通过讨论的洋葱架构来解决。在这种情况下,它指出域应该是核心,然后是域服务,然后是应用程序服务,最后是外层,即UI、测试和基础设施。在此模型中,数据访问(存储库)是基础设施。因此,关键是依赖关系从外层流向内层;也就是说,域不依赖于自身以外的任何东西。这与传统的三层体系结构形成对比,在传统的三层体系结构中,一切都依赖于数据访问代码,业务代码位于UI和数据访问代码之间。洋葱架构会说存储库(InfraRepo)属于外层,应用程序服务属于下一层,域服务属于下一层。因此,AppService永远不会调用InfraRepo,因为控制永远不会流向外层,只能从外层传入。相反,AppService将调用DomainService,DomainService将调用域(即业务逻辑)。域将利用它为数据访问定义的抽象(接口或纯虚拟类)。InfraRepo将实现此抽象,理想情况下,域类将使用IoC容器来获取InfraRepo实例,同时只知道接口。也就是说,IoC容器的作用类似于DDD构建块中的上述工厂

原则已经存在了一段时间,它处理类设计的更精细方面,以允许灵活和健壮的代码。在这种情况下,依赖倒置原则可以通过IoC容器实现,作为其使用的附加参数。此外,存储库接口的定义应牢记接口隔离原则。

  • 存储库实现位于较低的基础结构/持久性/数据/。。。层。如果一个存储库实现调用域服务,则意味着您将此类决策委托给较低层。顺便说一句,您还使另一个Repo实现完全合法地不调用该服务

    这有点奇怪,因为在任何用例中