Introduction

代码分层有助于降低复杂性和提高复用性。ABP 遵循 DDD(Domain Driven Design)原则。

Domain Driven Design Layers

DDD 中有四个基本层:

  • Presentation Layer:提供用户界面,实现用户交互操作

  • Application Layer::进行展现层与领域层之间的协调,协调业务对象来执行特定的应用程序的任务。它不包含业务逻辑

  • Domain Layer:包括业务对象和业务规则,这是应用程序的核心层

  • Infrastructure Layer:提供通用技术来支持更高的层。例如基础设施层的仓储(Repository)可通过 ORM 实现数据库交互

ASP.NET Boilerplate Application Architecture Model

除了 DDD 外,现代程序架构中还有其他逻辑层和物理层。ABP 的启动模板就默认实现了下面的模型,也推荐你在二次开发时遵循该模型。
NLayer Architecutre - 图1

Client Applications

通过 HTTP APIs 将程序用作服务的远程客户端。它们可以是 SPA、移动应用或第三方消费者。可以在应用程序内实现本地化和导航。

Presentation Layer 表现层

ASP.NET Core 可以认为是表现层。它可以是物理层(通过 HTTP APIs 使用程序)或逻辑层(直接注入然后使用程序服务)。无论是那种用法,它都可以进行本地化,导航,对象映射,缓存,配置管理,审计日志记录等。它还涉及授权,会话,功能(用于多租户应用程序)和异常处理。

Distributed Service Layer 分布式服务层

该层用于通过 REST、OData 和 GraphQL 等远程 API 提供应用程序/域功能…… 不包含业务逻辑,只是将 HTTP 请求转换为域交互,或者可以使用应用程序服务来委派操作。该层通常包括授权,缓存,审计日志,对象映射,异常处理,会话等……

Application Layer 应用层

应用层是表现层和领域层交互的中间者,协调业务对象去执行特定的应用任务。它还可以处理授权,缓存,审计日志,对象映射,会话等……

Domain Layer 领域层

这是实现领域逻辑的主要层。通过实体、值对象和领域服务去执行业务/领域逻辑。它还可以包括 Specifications 和领域事件。它定义了用于读取和存储实体(通常说的 DBMS)的 Repository 接口。

Infrastructure Layer 基础设施层

保证其他层的工作。它通过 EF Core 实现了 Repository 接口进而操作数据库。它还可能包含邮件收发组件。这层不一定严格的在其它层之下,但通常都由它来实现其他层中的抽象概念。