ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架。ABP不只仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型。学习使用ABP框架也有一段时间了,一直想全面了解下这个框架的整个前因后果,并把想把它使用历程整理成一个系列出来,不过一直没有下笔来写这篇文章的开篇,就是但愿可以深刻了解,再深刻了解一些,但愿本身可以理解透彻一些,不能误人子弟,也不想和网上千篇一概的翻译官网的内容,官网的英文介绍也已经很详细了,因而我以为仍是以实际使用的过程进行必定的整理会更好。html
初次了解ABP框架,对它仍是很是惊艳的,它基本上是.NET 领域架构的集大成者,几乎囊括了咱们.NET领域排的上名的各类技术应用,并且它自己能够支持.net framework和.net core两种技术流派,对它的介绍也是很是感兴趣。前端
咱们来大概了解下ABP框架涉及到的内容。git
除了这些重要特性外,ABP框架还有不少一些特别的功能或者概念。github
ABP框架主要仍是基于领域驱动的理念来构建整个架构的,其中领域驱动包含的概念有 域对象Entities、仓储对象Repositories、域服务接口层Domain Services、域事件Domain Events、应用服务接口Application Services、数据传输对象DTOs等。通常简化来讲,咱们能够只须要保留域对象,标准仓储对象(不用自定义仓储接口)、应用服务接口和DTO对象便可,域服务层接口层和自定义的仓储对象通常状况下能够省略,后面我会介绍这个内容,也就是利用这些对象及关系,快速构建一个易于使用的ABP框架分层。sql
ABP官方网站:http://www.aspnetboilerplate.com,从里面能够查看很详细的案例和文档说明,能够根据须要下载不一样类型的基础框架。数据库
ABP GitHub源码地址:https://github.com/aspnetboilerplate,能够下载整个基础的框架内容,以及相关的样板案例代码。后端
下面是一个比较直观的ABP框架分层架构图。浏览器
上图只是一个大概的介绍,其实客户端部分,还应该包括Winform客户端、控制台客户端、WPF客户端等内容,而浏览器的前端-Web前端,还能够包含使用Ant-Design(React)、IView(VUE)、Angular等不一样的前端技术来承载界面呈现层。而底层的数据库支持,还能够接入更多的,包括MS Sqlserver、Oracle、Mysql、PostgreSQL、SQLite等数据库。架构
咱们能够看到展示层、应用层、领域层、持久化层等几个不一样的分层,每一个分层彷佛都很好,可是可能须要落实到实处进行进一步的了解,因为目前.net core的技术应用逐渐走向主流,咱们就以它的.net core方向进行介绍解读。app
纵观整个ABP框架,它的核心仍是主要以 .NET 的后端技术为主线,也是着重笔墨的部分,在其展示层中,虽然Asp.NET MVC(包括.net Core部分)和Web API做为两个部分,但它的动态发布Web API,更为Web API优先的架构提供了很好的便利。
在当今流行的展示层中,愈来愈不依赖于后端的技术实现,而侧重于Web API标准化的对接,基于JSON数据的交互处理。不论是以Ant-Design(React)、IView(VUE)、Angular等技术应用的Web前端,咱们能够看到这些架构很容易实现对Web API的标准接口对接,在我较早提供的Winform混合框架里面,也是以Web API优先的策略进行云端应用的部署。以下图是我在博客《Web API应用架构设计分析(1)》、《Web API应用架构设计分析(2)》、《Web API接口设计经验总结》、《Winform混合式开发框架访问Web API接口的处理》、《Web API应用架构在Winform混合框架中的应用(3)--Winform界面调用WebAPI的过程分解》等文章中的阐述。
做为ABP框架的核心、Web API动态发布,为其展示层提供了很是方便的途径,使得咱们能够在利用其强大的后端架构的基础上,整合了不少.NET的不少技术应用,如前面介绍的不少ABP框架的特性。
前面介绍了基于Web API优先应用的特色,能够为咱们产品线的快速扩展提供了很好的技术支撑,而ABP框架是一个比较强大、健壮,并且是集众多.NET优秀技术应用的集大成者,虽然整合使用ABP框架会比较通常的框架须要花费多一些时间,不过在构建比较大型,又须要强大的后台的需求下,这种应用场景是很是不错的,也是一个很好的投资。
ABP框架,包含了两个部分,一个基础的ABP框架实现(地址https://github.com/aspnetboilerplate/aspnetboilerplate),这个是咱们所说的ABP框架的核心实现;
一个是基于这个基础上扩展应用的ABP框架,它整合了框架核心部分,并提供了一些基础处理模块,如人员、角色、权限、会话、身份验证、多租户、日志记录等等内容,咱们通常指的ABP框架应用就是这个基础上扩展本身的业务项目。这个部分,咱们能够根据官网上进行必定的选项配置,而后下载使用。
下载.net core 项目后,其中后端部分的项目视图以下所示。
咱们从这个项目里面能够看到,它主要是分为下面几个项目分层。
Application应用层:应用层提供一些应用服务(Application Services)方法供展示层调用。一个应用服务方法接收一个DTO(数据传输对象)做为输入参数,使用这个输入参数执行特定的领域层操做,并根据须要可返回另外一个DTO。
Core领域核心层,领域层就是业务层,是一个项目的核心,全部业务规则都应该在领域层实现。这个项目里面,除了定义所需的领域实体类外,其实能够定义咱们本身的自定义的仓储对象(相似DAL/IDAL),以及定义本身的业务逻辑层(相似BLL/IBLL),以及基于AutoMapper映射规则等内容。
EntityFrameworkCore 实体框架核心层,这个项目不须要修改太多内容,只须要在DbContext里面加入对应领域对象的仓储对象便可。
Migrator数据迁移层,这个是一个辅助建立的控制台程序项目,若是基于DB First,咱们能够利用它来建立咱们项目的初始化数据库。
Web.Core Web核心层,基于Web或者Web API的核心层,提供了对身份登录验证的基础处理,没有其余内容。
Web.Core.Host Web API的宿主层,也是动态发布Web API的核心内容,另外在Web API里面整合了Swagger,使得咱们能够方便对Web API的接口进行调试。
Tests 单元测试层,这个提供了一些应用层对象的模拟测试,其中测试的数据库使用的是Entity Framework 的内存数据库,不影响实际数据库内容。
以上是ABP框架的整体状况,咱们到如今尚未正式深刻介绍其中的各个部分,以及若是对这些内容进行优化处理,主要就是介绍一个总体性的ABP框架特性,以及ABP框架侧重的Web API方向,后续我继续对它进行深刻的介绍和项目改造,以便适应咱们实际的ABP项目开发。