洋葱建筑的服务和授权

Mah*_*hdy 5 domain-driven-design onion-architecture

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

  • Domain.Entities(业务对象)
  • Domain.Interfaces(域服务和存储库的接口)
  • Domain.Services(域服务接口的实现)

基础设施

  • Infrastructure.Data(使用EF实现存储库和工作单元)
  • Infrastructure.DependencyResolution(使用Unity实现IoC)

UI

  • UI.WebMVC

以下是我的问题:

1-我对这些层是对的还是我错过了什么?

2-对于与特定技术(例如,日志记录)相关的服务,其接口应该是(Domain.Interfaces或Infrastructure.Interfaces)?

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

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

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

Raf*_*ski 2

在此输入图像描述

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

  2. 日志记录可能不是域逻辑的一部分,因此它应该位于基础设施中,包括接口和实现。要使用它,您必须将其注入到应用程序层。

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

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

  5. 依靠。用户使用用户凭据请求基础设施层,基础设施层使用该凭据调用应用程序层,您尝试使用给定的凭据检索用户,但首先使用某些函数将原始密码转换为哈希密码。如果找到用户,您可以在基础设施层对用户进行身份验证。这里不需要域服务,但这是一个例外。