Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/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_Onion Architecture - Fatal编程技术网

Domain driven design 洋葱架构中的服务和授权

Domain driven design 洋葱架构中的服务和授权,domain-driven-design,onion-architecture,Domain Driven Design,Onion Architecture,我正在努力学习洋葱架构,据我所知,我的解决方案组织如下: 领域 域.实体(业务对象) 接口(域服务和存储库的接口) 域服务(域服务接口的实现) 基础设施 基础设施.数据(存储库和EF工作单元的实现) Infrastructure.DependencyResolution(国际奥委会统一实施) 用户界面 UI.WebMVC 以下是我的问题: 1-我对这些层的理解是正确的还是我遗漏了什么 2-对于与特定技术(如日志记录)相关的服务,其接口应在何处(域接口或基础设施接口) 3-据我所知,域

我正在努力学习洋葱架构,据我所知,我的解决方案组织如下:

领域
  • 域.实体(业务对象)
  • 接口(域服务和存储库的接口)
  • 域服务(域服务接口的实现)
基础设施
  • 基础设施.数据(存储库和EF工作单元的实现)
  • Infrastructure.DependencyResolution(国际奥委会统一实施)
用户界面
  • UI.WebMVC
以下是我的问题:

1-我对这些层的理解是正确的还是我遗漏了什么

2-对于与特定技术(如日志记录)相关的服务,其接口应在何处(域接口或基础设施接口)

3-据我所知,域服务将处理我的业务用例,因此我将从应用程序服务中获得哪些好处

4-域服务和应用程序服务之间有什么区别,应该在哪个项目应用程序服务接口中使用

5-用户授权流程应该是应用程序服务或域服务的一部分吗?

  • 这是一个六边形架构的模式,但它非常接近洋葱,在我看来,你应该使用它。这里显示了3层:域(黄色)、应用程序(红色)、基础结构(绿色+蓝色)。因此,回答您的问题-您缺少了一些像应用程序服务这样的功能

  • 日志记录可能不是域逻辑的一部分,所以它应该在基础架构中,包括接口和实现中。要使用它,您必须将其注入应用程序层

  • 域服务只处理与您的业务相关的事情。应用程序服务大部分时间都在为域服务做准备,例如创建存储库并从中检索聚合,然后调用域服务并将聚合传递到其中。你不应该在应用层处理你的业务逻辑

  • 正如我在第3点所写。应用程序服务应该位于使用域服务的每个项目中

  • 视情况而定。用户使用用户凭据请求您的基础结构层,基础结构层使用该凭据调用应用程序层,在那里您尝试使用给定凭据检索用户,但首先您使用一些函数将原始密码转换为散列密码。若找到用户,则可以在基础结构层对用户进行身份验证。这里不需要域服务,但这是个例外


  • 感谢您的回复Rafal,我现在很困惑,1-应用程序服务应该在一个单独的项目(dll)中,还是在解决方案中使用域服务的每个项目中?2-在您关于应用程序服务的示例中,您说他们正在创建存储库并从中检索聚合以传递给域服务,为什么我在应用程序服务中这样做,而我可以从域服务完全访问存储库?1。应用程序服务正在处理域服务,您不应该直接从基础架构(例如从框架控制器/视图)处理域服务。2.因为在域层中,您只执行业务逻辑。检索聚合不是一种业务逻辑。你应该学习埃文斯的DDD,或者至少是弗农的IDDD。谢谢拉法,我想事情对我来说已经开始变得更清楚了