洋葱架构 - 层是什么以及在哪里放置服务?

Onion Architecture - what are the layers and where to place the services?

我正在学习并制定一个应用洋葱架构和领域驱动设计的示例项目。

根据我的理解,我已经起草了一份小型演示文稿并作为图片附在本 post 中。

我需要澄清洋葱架构的层次及其实现。你能根据我的介绍解释一下吗?

核心项目:

域层 - 实体、值对象、聚合根、域异常对象。

领域服务层 - 业务逻辑契约。

基础设施服务层 - 持久性契约、存储库契约、电子邮件和短信契约、领域事件和集成事件契约。

应用服务层 - 为用例编排基础架构和域服务接口。

身份项目:

Web Api 层 - 控制器、配置、组合根等

基础架构层 - 持久性实施、存储库实施、电子邮件和短信实施、消息队列等

我在哪里实施核心项目领域服务层的契约?

嗯,据我了解 Onion 架构,有一个域层,就 DDD 而言,包括聚合、实体、值对象、存储库(接口)和域服务。

然后是应用服务层,负责协调域内容。

然后是基础设施层,最后是 Web Api 层。

这里的规则是一个层不能使用上面层的任何东西。

洋葱架构分为这些层:

  • 核心包含业务规则(在 DDD 中,领域模型)。
  • 围绕核心的是应用层。
  • 应用层周围有端口(IHM、REST...)和适配器层(持久性、消息传递...)。

在您的示例中,您有两个项目,每个项目都是一个包含所有层的洋葱。

此外,不要忘记 design/cut 您的子域具有业务专家的意见。出于技术考虑,这不是一个好方法。