ABP开发框架前后端开发系列——框架的总体介绍

ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架
ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型
学习使用ABP框架也有一段时间了,一直想全面了解下这个框架的整个来龙去脉,并把它使用历程整理成一个系列出来,不过一直没有下笔来写这篇文章的开篇,就是希望能够深入了解,再深入了解一些,希望自己能够理解透彻一些,不能误人子弟,也不想和网上千篇一律的翻译官网的内容,官网的英文介绍也已经很详细了,于是我觉得还是以实际使用的过程进行一定的整理会更好。

初次了解ABP框架,对它还是非常惊艳的,它基本上是.NET 领域架构的集大成者几乎囊括了我们.NET领域排的上名的各种技术应用,而且它本身可以支持.net framework和.net core两种技术流派,对它的介绍也是非常感兴趣。

1)ABP框架的特点
我们来大概了解下ABP框架涉及到的内容。

  • 依赖注入,这个部分使用 Castle windsor (依赖注入容器)来实现依赖注入,这个也是我们经常使用IOC来处理的方式;
  • Repository仓储模式,已实现了Entity Framework、NHibernate、MangoDB、内存数据库等,仓储模式可以快速实现对数据接口的调用;
  • 身份验证与授权管理,可以使用声明特性的方式对用户是否登录,或者接口的权限进行验证,可以通过一个很细粒度的方式,对各个接口的调用权限进行设置;
  • 数据有效性验证,ABP自动对接口的输入参数对象进行非空判断,并且可以根据属性的申请信息对属性的有效性进行校验;
  • 审计日志记录,也就是记录我们对每个接口的调用记录,以及对记录的创建、修改、删除人员进行记录等处理;
  • Unit Of Work工作单元模式,为应用层和仓储层的方法自动实现数据库事务,默认所有应用服务层的接口,都是以工作单元方式运行,即使它们调用了不同的存储对象处理,都是处于一个事务的逻辑里面;
  • 异常处理,ABP框架提供了一整套比较完善的流程处理操作,可以很方便的对异常进行进行记录和传递;
  • 日志记录,我么可以利用Log4Net进行常规的日志记录,方便我们跟踪程序处理信息和错误信息;
  • 多语言/本地化支持,ABP框架对多语言的处理也是比较友好的,提供了对XML、JSON语言信息的配置处理;
  • Auto Mapping自动映射,这个是ABP的很重要的对象隔离概念,通过使用AutoMaper来实现域对象和DTO对象的属性映射,可以隔离两者的逻辑关系,但是又能轻松实现属性信息的赋值;
  • 动态Web API层,利用这个动态处理,可以把Application Service 直接发布为Web API层,而不需要在累赘的为每个业务对象手工创建一个Web API的控制器,非常方便;
  • 动态JavaScript的AJax代理处理,可以自动创建Javascript 的代理层来更方便使用Web Api,这个在Web层使用。

除了这些重要特性外,ABP框架还有很多一些特别的功能或者概念。

  • 多租户支持(每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数据时写相应代码;
  • 软删除支持(继承相应的基类或实现相应接口,会自动实现软删除)
  • 系统设置存取管理(系统级、租户级、用户级,作用范围自动管理)
  • EventBus实现领域事件(Domain Events)
  • 模块以及模块的依赖关系实现插件化的模块处理等等

ABP框架主要还是基于领域驱动的理念来构建整个架构的,其中领域驱动包含的概念有
域对象Entities、
仓储对象Repositories、
域服务接口层Domain Services、
域事件Domain Events、
应用服务接口Application Services、
数据传输对象DTOs等

一般简化来说,我们可以只需要保留域对象,标准仓储对象(不用自定义仓储接口)、应用服务接口和DTO对象即可,域服务层接口层和自定义的仓储对象一般情况下可以省略,后面我会介绍这个内容,也就是利用这些对象及关系,快速构建一个易于使用的ABP框架分层。

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方向进行介绍解读。

2) Web API优先的架构
纵观整个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框架会比较一般的框架需要花费多一些时间,不过在构建比较大型,又需要强大的后台的需求下,这种应用场景是非常不错的,也是一个很好的投资。

3)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项目开发。

原文地址:https://www.cnblogs.com/wuhuacong/p/10919020.html

ABP开发框架前后端开发系列——框架的总体介绍相关推荐

  1. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  2. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

  3. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理

    我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...

  4. winform前后端框架_ABP开发框架前后端开发系列(1)框架的总体介绍

    ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.学习使用ABP ...

  5. 3分钟搞懂前后端开发的区别

    上周末见了好多开发的年轻朋友,问了我一个问题:"前后端的区别和要求是什么?"分不清前后端开发的区别和要求,一种是因为前后端都了解,号称"全栈工程师",但又什么都 ...

  6. JEECG前后端分离UI框架实战抢先体验(ng2-admin+Angular4+AdminLTE+WebStorm)

    JEECG前后端分离UI框架 (ng2-admin+Angular4+AdminLTE) 关键词: ng2-admin.Angular4.AdminLTE.Nodejs.Jeecg JEECG紧跟技术 ...

  7. Web开发之三:前后端开发任务量分析与比较

    这一年来的项目,无论是个人中心.文库还是学科测评,每次都会被一个问题所困扰,那就是如何估量前后端的任务量.如何确定前后端的人员比. 在采用分工模式之后,经过两个项目的开发,和大个.阿黄.建坤可以明显的 ...

  8. 前后端开发的心得体会_前后端对接的思考及总结

    说在前面的话 随着前端NodeJs技术的火爆,现在的前端已经非以前传统意义上的前端了,各种前端框架(Vue.React.Angular......)井喷式发展,配合NodeJs服务端渲染引擎,目前前端 ...

  9. 萌新一手包App前后端开发日记(一)

    从事Android移动端也有些日子了,还记得一开始选择这份工作,是憧憬着有朝一日能让亲朋好友用上自己开发的软件,但日子久了才发现,并不是所有的公司,所有的项目的适用群体都是"亲朋好友&quo ...

最新文章

  1. eclipse c语言_如果你的电脑是windows7/10的环境,用什么编译器学习C语言好?
  2. centos7下搭建git和gitlab版本库
  3. 对话李飞飞,展望阿里云与MongoDB战略合作未来
  4. 汇编语言 将a段和b段中的数据依次相加,结果存放在c段中
  5. 还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb
  6. 【洛谷 - P1507 】NASA的食物计划(二维费用背包,dp)
  7. 【原创】MySQL里求给定的时间是所在月份的第几个礼拜
  8. 异常详细信息: System.UnauthorizedAccessException: 对路径“”的访问被拒绝。
  9. 凸优化-Proximal GD
  10. Blender真是不错的东西
  11. Termux安装SSH,下载linux系统
  12. 自定义身份证输入键盘
  13. 周易六十四卦——雷火丰卦
  14. 深入浅出Mysql - 优化篇(索引)
  15. 财路网每日原创推送:轻信微信上的投资专家,男子亏损四十多万!
  16. 利用DEMO系统 评估LoRa终端与网关
  17. 解决禅道(ZenTao)Mysql启动不了的问题
  18. c语言程序的命令行输入输出,C语言入门教程-命令行参数
  19. boost install
  20. 前端工具:2015年我最喜欢的一些发现

热门文章

  1. html5 拉窗帘 效果,卧室平开窗怎么拉窗帘 4款卧室向内平开窗飘窗安装遮光隔音窗帘设计图...
  2. 五种方案解决solidworks卡顿难题
  3. 泛微OA_E9之明细表选择框,选项带出主表审批人
  4. 如何开始你的渗透测试之旅
  5. 某程序员毕业进UC,被阿里收购!跳去优酷土豆,又被阿里收购!再跳去饿了么,还被阿里收购!难道阿里想收购的是他?
  6. Node.js学习-01node.js的下载安装
  7. 流式大处理的三种框架对比:Storm,Spark和Flink
  8. 提取ppt内FLASH文件
  9. 异构计算平台(1)--了解
  10. python相关操作(二)控制手机操作