ABP项目概述
Posted seekdream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABP项目概述相关的知识,希望对你有一定的参考价值。
在系统性介绍整个ABP框架之前,我们首先需要对ABP框架有一个大概的了解,ABP框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目)顾名思义就是能够通过当前的项目模板来进行快速的Asp.Net开发,这个项目是一个GitHub上面非常流行的开源项目,整个项目的地址请点击这里,这个一个非常流行的框架,通过这个框架能够快速搭建Asp.Net项目,而且能够做到项目之间的分层,层与层之间通过接口进行调用,而且能够最大程度上保证整个项目层与层之间的松散耦合,从而做到真正地高内聚和低耦合,而且整个项目真正做到了DDD(领域驱动设计)思想,我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的,下面我们来逐一对这个框架进行论述。
一 概述
首先看看官方文档对其的解释
展现层:当前层提供了一个面向用户的接口,使用应用层来和用户进行交互,这里我们可以简单理解成MVC中的View以及其它可以和用户进行交互的可视化方式,这一层只用于进行展示。
应用层:应用层是展示层和领域层之间的桥梁,在这一层我们可以定义一些应用的服务,同时定义DTO等一些对象, 同时我们在当前层定义一些常用的验证、配置、Session等一些常见的和用户直接交互的一些逻辑等。
领域层:包括一些业务对象和他们之间的一些规则,这个是整个应用的核心部分。
框架层:提供一些的一些服务设施,从而为上面更高层次提供基础服务,比如ORM以及Data Filters等对象。
看完了这些我们再来通过一张图片对其有一个大概的了解。
对着这个框架图,再谈一谈本人对这个架构的思考与理解:
展示层:前端展示层,及MVC中的V层,以及其它可供与用户进行交互的方式。
应用层(XXX.Application):主要是通过对外提供REST风格的WebAPI接口(使用ABP框架生成动态WebApi方式时),定义数据传输对象DTO,从而直接面向展示层提供接口,在内部会会调用领域层中定义的接口方法进行对外和对内数据操作,另外还会处理一些Authorization, Caching, Audit Logging, Object Mapping, Session等方面的操作,所有的这些都是通过和用户进行交互来完成的。
领域层(XXX.Core):最重要的是实现对具体业务的抽象建模,构建Model层,另外通过注入IRepository接口实现对Model的各种操作,最终完成实际业务的对接,这个是整个应用系统的核心部分,具体的操作会定义在继承自IDomainService接口的XXXManager中,并且最后将当前唯一实例注入到Application层中。
架构层(XXX.EntityFrameworkCore):主要是提供一个和底层数据库进行交互的接口,通过领域层定义Model,然后使用CodeFirst生成数据库表结构,最后通过IRepository接口和领域层进行交互,另外还可以定义一些Data Filter等一些列的基础设施服务,通过这些能够实现为更高一层提供基础服务。
二 系统特色
1 容器技术
一个大的系统通过构筑一个唯一的容器,并通过将接口和实现注入容器来进行交互的方式是一种非常流行的技术,在ABP项目中底层采用 Castle Windsor 作为依赖注入容器,能够将接口注入到容器中,并且在不同的构造函数中通过注入接口来完成交互,这个在一定的程度上能够减少代码之间的耦合性,最终提高代码的可复用性,最终实现整个软件系统的高内聚低耦合,最终使整个代码更加规范,很多大型的项目都会使用依赖注入容器的方式来管理整个项目的核心交互逻辑,是一种非常重要的技术。
2 模块化设计思想
整个系统通过构筑一个个Module作为逻辑上的分割,而且还通过定义统一的抽象基类AbpModule来完成整个ABP框架对底层模块进行控制,另外通过插件化的思想构筑可扩展的软件热插拔系统,从而在最大程度上实现软件系统的规整、可扩展功能,最终使整个软件系统更加成熟。
3 全面而完整的基础功能模块
整个ABP框架集成了非常多而且成熟的技术,诸如:EntityFrameworkCore、IdentityServer、Log4Net、RedisCache等一系列的基础功能,而且整个框架提供了Asp.Net MVC以及Asp.Net Core 的基础接口,功能完善,能够在最大的程度上减少重复造轮子的弊端,这些优点都使得整个框架更有特色,而且整个项目开源,所以能够按照自己的需要对项目进行定制化开发与维护。
三 项目源码分析
1 ABP模块调用
2 ABP ORM层分析
以上是关于ABP项目概述的主要内容,如果未能解决你的问题,请参考以下文章
基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则