目录
介绍
在应用程序设计中,分层架构是一种被广泛使用的技术,它助于降低复杂度和提高代码的可重用性。在ABP框架中,使用了DDD(领域驱动设计)的原则来实现分层架构.
DDD分层架构
在DDD(领域驱动设计)架构模型中,有四个基础层。
- 表现层: 用户访问接口。使用应用层来实现与用户交互。
- 应用层: 应用层是表现层和领域层之间的媒介,它负责组织和编排业务对象来执行特定的应用任务。,
- 领域层:定义业务对象、逻辑和规则,它是整个应用的核心。
- 基础设施层:为上层提供通用的技术支持,大多数情况会使用第三方库。
ABP架构模型
在一个现代化的架构应用中,除了DDD模型的4个基础层(表现层、应用层、领域层、基础设施层)以外, 通常还有其他的一些逻辑层和物理层。下面的架构模型图是ABP建议使用并且已经实现的结构模型。ABP框架不仅提供了基类和服务来非常容易的实现此架构模型,并且已经提供了模板程序(参见ABP框架 - 我的第一个WEB API)来让我们直接在此架构模型上开始开发。
客户端
远程客户端是应用服务的消费者,通过HTTP API的方式来调用应用服务。客户端可以是一个单页应用程序(SPA),一个移动APP,也可以是一个第三方的消费者。本地化和导航可以在客户端中实现。
展现层
ASP.NET (Core) MVC可以被认为是展现层。展现层可以是物理层(通过HTTP API来调用应用服务),也可以是一个逻辑层(直接注入并使用应用服务)。展现层一般提供本地化、导航、对象映射、缓存、配置管理、审计日志等这些功能。也可以处理授权、会话和异常。
分布式服务层
分布式服务层通过API(例如REST、OData、GraphQL)来为远程客户端提供应用服务功能。它不包含任务业务逻辑,仅仅是接收HTTP请求,然后调用相应的应用/领域服务来完成特定功能。分布式服务层一般包括授权、缓存、审计日志、对象映射、异常处理和会话等。
应用层
应用层主要包含应用服务,应用服务从展示层/分布式服务层接收输入DTO对象,然后调用领域层的特定操作,组合编排领域对象,并根据需要返回输出DTO给展示层/分布式服务层。应用层通常也会包括授权、缓存、审计日志、对象映射、会话等。
领域层
领域层主要用来实现业务逻辑,它包括领域实体、值对象、领域服务并执行业务逻辑。它也规约和领域事件。领域层定义了数据仓储接口来读取和持久化实体到数据源,但是领域层并不实现数据仓储。
基础设施层
领域层定义了数据仓储接口,基础设施层则通过Entity Framework(Core)/NHibernate与实际数据库交互来实现数据仓储接口。基础设施层并没有严格的定义,它里面实现的功能通常是提供给其他层使用的公共功能,比如发送邮件功能,就可以定义在基础设施层。