1.2 ABP总体介绍 - 多层架构

前言

应用程序代码库的分层是一种广泛接受的技术,有助于降低复杂性并提高代码的可重用性。为了实现分层体系结构,ASP.NET Boilerplate遵循域驱动设计的原则。

领域驱动设计层

领域驱动设计(DDD)中有四个基本层:

  • 展现层(Presentation):向用户提供一个接口(UI),使用应用层来和用户(UI)进行交互。

  • 应用层(Application):应用层是表现层和领域层能够实现交互的中间者,协调业务对象去执行特定的应用任务

  • 领域层(Domain):包括业务对象和业务规则,这是应用程序的核心层。

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

根据实际需要,可能会有额外添加的层。例如:

  • 分布式服务层(Distributed Service) :用于公开应用程序接口供远程客户端调用。比如通过ASP.NET Web API或WCF来实现。

这些都是常见的以领域为中心的分层体系结构。不同的项目在实现上可能会有细微的差别。

ASP.NET Boilerplate应用程序体系结构模型

除了DDD之外,现代架构应用程序中还有其他逻辑层和物理层。为ASP.NET Boilerplate应用程序建议并实现了以下模型。ASP.NET Boilerplate不仅通过提供基类和服务来简化实现此模型,还提供了直接从此模型开始的启动模板

层次结构概览如下图所示:

客户应用

这些是通过HTTP API(API控制器,OData控制器,甚至可能是GraphQL端点)将应用程序用作服务的远程客户端。远程客户端可以是SPA(单页面应用程序),移动应用程序或第三方消费者。可以在此应用程序内完成本地化
导航栏

表现层

ASP.NET [Core] MVC(模型 - 视图 - 控制器)可以被认为是表现层。它可以是物理层(通过HTTP API使用应用程序)或逻辑层(直接注入和使用应用程序服务)。在任何一种情况下,它都可以包括 本地化导航栏对象映射缓存配置管理审计日志记录等。它还涉及 授权验证会话功能(用于 多租户应用程序)和异常处理

分布式服务层

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

应用层

应用层主要包括应用程序服务的使用领域层和领域对象( 领域服务实体 ...)来执行请求的应用程序的功能。它使用数据传输对象从表示或分布式服务层获取数据并将数据返回。它还可以处理 授权验证缓存审计日志记录对象映射会话等...

领域层

这是实现我们的域逻辑的主要层。它包括 实体值对象领域服务,以执行业务/领域逻辑。它还可以包括规约和触发 领域事件。它定义了仓储接口,以便从数据源(通常是DBMS)读取和保留实体。

基础设施层

基础结构层使其他层工作:它实现仓储接口(例如使用EntityFramework Core)以实际使用真实数据库。它还可能包括与供应商集成以邮件发送等。该层不强制所有高层都需要直接实现或引用(并非所有层的下层),但实际上通过实现它们的抽象概念来支持其他层。