ABP开发框架前后端开发系列---(1)框架的总体介绍

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ pdflib输出表格_DescrTab2包,输出SCI级别的描述统计表

今天浏览R包,发现一个不错的包——DescrTab2包。看R包介绍,这个包可以绘制出版物质量级别的描述统计表。看起来很不错。下面来学习下。1. R包安装和加载install.packages("DescrTab2") # 安装包library(DescrTab2) # 加载包2. 加载演示数据集l…

服务器怎么控制忽略样式_使用JavaScript来编写你的CSS样式代码——JSS

介绍JSS是CSS的创作工具,它允许你使用JavaScript以声明,无冲突和可重用的方式描述样式。它可以在浏览器,服务器端或在构建时在Node中编译。JSS与框架无关。它由多个包组成:核心部分,插件以及框架集成等。Githubhttps:/…

Java设计模式、框架、架构、平台之间的关系

1、设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单。那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类、对象和接口之间的关系,是前人总结的经验。比如我要在代码中实现一个…

如何学习(记住)linux命令(常用选项)

作者:林果皞 链接:https://www.zhihu.com/question/21690166/answer/66721478 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Unix & Linux 命令行特别之处在于,一些选项的设…

增效工具_【危中寻机】降本增效生存之道 运用IE基础工具提升制造效率

效率提升的利器工业工程IE作为一门学科诞生于美国,却首先在日本得到了最大程度的践行与推广,成为了丰田生产方式TPS及精益制造LP的核心现场IE中的4大核心(工程分析、动作分析、时间分析、布局分析)仍是所有IE的入门工具,被笔者称为“基础IE”…

as将安卓应用打包_Android Studio打包生成apk的方法(超级简单哦)

释放双眼,带上耳机,听听看~!打包文件是需要生成APK文件,其他人可以通过APK安装和使用,一般来说,包是指APK生成的发布版本,下文技术狗小编还介绍了Android Studio 超级简单的打包生成apk的方法&a…

Linux中常用的命令都是哪些单词的缩写

作者:蓬岸 Dr.Quest 链接:https://www.zhihu.com/question/49073893/answer/114986798 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 417个命令缩写:https://www.abbreviations.co…

ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作

mysql、ubuntu系统防火墙常规操作编辑:006 时间:2020-02-11mysql:数据库操作连接数据库:mysql -u username -p创建数据库:create database databasename;删除数据库:drop database databasename;指定数…

如何轻松记忆Linux文件系统层次结构

Linux对于新手来说非常难学。打好基础对于后面深层次的学习非常重要。 对文件系统层次结构要基本的概念。怎么才能理解并且记忆层级结构呢? 方法/步骤 为了帮助记忆,我做了一个比较清晰的图表来协助层次的记忆。 很多目录文件夹的名字长得非常抽象&…

fmc是fpga直接引出来的吗_家长速看!你还在用“不要和陌生人说话”糊弄孩子的安全教育吗?...

在许多幼儿安全教育案例中,我们都会看到这样一个试验:记者假扮人贩子,利用棒棒糖、零食去诱惑幼儿园的孩子。在其中一次试验中,21个孩子有20个中招,直接跟着陌生人走了。这个试验最终引出来的结论就是要教育孩子不要和…

CentOS 7文件系统与日志分析详解

Linux 文件系统 在处理 Linux 系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键。熟悉 Linux 系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点、“对…

oracle同一个示例两个用户的数据同步_分享两个shell脚本--一键统计Oracle数据库用户信息...

概述今天主要分享一下两个shell脚本,主要是为了查看所有数据库用户及其表空间,统计某个指定用户的明细,下面一起来看看吧~数据库连接脚本use script settdb.sh for DB login details registry#!/bin/bashtmp_username$SH_USERNAMEtmp_passwor…

plsql视图添加表字段_教你不到两分钟,快速创建数据透视图

如果说数据透视表给我们提供了灵活、快捷的数据计算工具, 那么数据透视图就是更直观、动态地展现大批量数据的变化规律和趋势。数据透视图作为数据透视表中的重点内容,高阶的内容包括数据透视图的编辑、美化成高大上的数据分析图表。与万能切片器结合使用实现多表甚…

c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...

向数据库的一张表中添加数据,可以采用单个添加,即一条数据、一条数据的添加;也可以采用批量导入,依次将好些条数据写入数据库的一张表中。文本借助实例《添加系列信息》讲解一种向数据库批量导入数据的方法。1.界面设计观看一下添…

项目架构开发:数据访问层之Cache

数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能。在分层系统中所有有关数据访问、检索、持久化的任务,最终都将在这一层完成。 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 1、有缓存、日志、异常处理、数据CRUD、…

jquery mysql实现加入购物车_jQuery实现加入购物车飞入动画效果

HTML首先载入jQuery库文件和jquery.fly.min.js插件。接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片、价格、名称以及加入购物车按钮等信息。¥3499.00LG 49LF5400-CA 49寸…

结合vue、react、angular谈谈MVC、MVP、MVVM框架

首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别。 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个library,用于构建用户界面。 v…

先进的ASP.NET开源工作流快速开发框架 - RoadFlow

.net可视化工作流引擎RoadFlow - 设计概述 RoadFlow是天知软件旗下基于.NET的工作流快速开发平台,由从事六年以上OA及工作流开发与实施的团队设计开发,该工作流平台已应用于众多大型企事业单位。拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角…

view [bootstrap-4] not found如何解决_Dubbo如何处理业务异常,这个一定要知道哦

前言我们在开发应用系统时,不可避免的要使用到我们自己定义的异常,所以我们一般通常会用到自定义的业务异常类BusinessException,这个异常会继承extends RuntimeException,当发生业务限制的时候,会throw出来。问题在Sp…

android 加载网络bitmap图片 oom 简书_Android常见问题--ImageView加载图片OOM

开发中给ImageView加载一个高质量图片时,APP抛出了“Canvas: trying to draw too large(840253440bytes) bitmap.”的异常。猜测是图片占用内存太大,超出APP被分配的内存(我用的mate9,APP被分的内存差不多200m),造成了OOM。解决方…