在应用程序设计中,分层架构是一种被普遍使用的技术,它助于下降复杂度和提升代码的可重用性。在ABP框架中,使用了DDD(领域驱动设计)的原则来实现分层架构.html
在DDD(领域驱动设计)架构模型中,有四个基础层。数据库
在一个现代化的架构应用中,除了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与实际数据库交互来实现数据仓储接口。基础设施层并无严格的定义,它里面实现的功能一般是提供给其余层使用的公共功能,好比发送邮件功能,就能够定义在基础设施层。htm