简洁Clean架构是构建应用程序的一种流行方法。
这是一个分层架构,将项目分为四个层次:
- Domain
- Application
- Infrastructure
- Presentation
每一层通常都是解决方案中的一个项目。
这是清洁clean架构的视觉表示:
1、领域层Domain
领域层位于清洁架构的核心。在这里,我们定义了诸如:实体、值对象、聚合、领域事件、异常、存储库接口等。
这是我喜欢使用的文件夹结构:
Domain |
需要注意的一件事是,领域层不允许引用解决方案中的其他项目。
这是一种“按类型分组”的方法来构造域。
优点:
- - 易于使用
- - 很容易知道“什么在哪里”
缺点:
- - 无领域上下文
- - 复杂性随着项目的增长而增加
Clean Architecture在文件夹结构方面非常灵活。 在较小的项目中使用过“按类型分组”的方法。
但是,如果项目增长,维护它很快就会变得棘手。 所以小心行事。
2、应用层
应用程序层位于域层的正上方。它充当域层的协调器,包含应用程序中最重要的用例。
您可以使用服务或使用命令和查询来构建用例。
我是CQRS模式的忠实粉丝,因此我喜欢使用命令和查询方法。
这是我喜欢使用的文件夹结构:
Application |
在该文件夹中,我定义了Application层Abstractions所需的接口。这些接口的实现位于上层之一。
对于域层中的每个实体,我创建一个包含命令、查询和事件定义的文件夹。
3、基础设施层
基础设施层包含面向外部的服务的实现。
什么会属于这一类?
- 数据库 - PostgreSQL、MongoDB
- 身份提供商 - Auth0、Keycloak
- 电子邮件提供商
- 存储服务 - AWS S3、Azure Blob 存储
- 消息队列 - Rabbit MQ
这是我喜欢使用的文件夹结构:
Infrastructure |
将 Persistence 文件夹作为其项目并不罕见。我经常这样做,以便将所有面向数据库的代码包含在一个项目中。
4、表示层
表示层是我们系统的入口点。通常,您可以将其实现为 Web API 项目。
表示层最重要的部分是Controllers,它定义了我们系统中的 API 端点。
这是我喜欢使用的文件夹结构:
Presentation |
有时,我会将表示层从实际的 Web API 项目中移走。我这样做是为了隔离Controllers并执行更严格的约束。