首页 > 其他分享 >ABP框架-介绍

ABP框架-介绍

时间:2023-09-01 21:45:10浏览次数:24  
标签:调用 框架 示例 介绍 ABP input TaskAppService 方法

什么是ABP

ABP(ASP.NET Boilerplate)是一个开源的应用程序框架,以帮助开发人员快速开发。但它又不仅仅是一个框架,更提供了一套基于DDD的架构模型和最佳实践。

下面我们来研究一个最简单的示例来看看使用ABP有哪些好处

public class TaskAppService : ApplicationService, ITaskAppService
{
private readonly IRepository<Task> _taskRepository;

public TaskAppService(IRepository<Task> taskRepository)
{
_taskRepository = taskRepository;
}

[AbpAuthorize(MyPermissions.UpdateTasks)]
public async Task UpdateTask(UpdateTaskInput input)
{
Logger.Info("Updating a task for input: " + input);

var task = await _taskRepository.FirstOrDefaultAsync(input.TaskId);
if (task == null)
{
throw new UserFriendlyException(L("CouldNotFindTheTaskMessage"));
}

input.MapTo(task);
}
}

这里我们看到的是一个Application Service类, TaskAppService, 里面定义了一个方法UpdateTask. Application Service在DDD的设计中是直接被展示层所调用的,简单来说,一个前端页面可以直接调用TaskAppService.UpdateTask.

就这个简单的示例,我们一起来看看使用ABP有哪些好处。

  • 依赖注入 - ABP提供了一个惯用的DI基础框架,所谓惯用,就是大家平常使用的DI方式一致,保持大家的使用习惯。因为这个示例是在应用服务层,所以注入容器中的实例生命周期都是短时的(每个请求创建一次,生命周期与请求相同)。 它可以简单方便的注入任何依赖,比如在本示例中的IRepository。
  • 仓储 - ABP可以为每一个实体都创建一个默认仓储,在示例中是IRepository, 默认仓储有许多非常有用的方法,例如示例中的FirstOrDefaultAsync, 并且我们可以非常容易的根据我们自己需求来扩展仓储。仓储对DBMS和ORM做了抽象并简化了数据访问逻辑。
  • 授权- ABP可以使用声明式的方式来检查权限。在示例中,如果一个用户没有登录,或者没有“UpdateTasks”的权限,那么他将不能访问UpdateTask方法。 ABP不单单使用声明式的特性来检查权限,它还提供了其他的授权方式
  • 请求验证- ABP自动的检查请求输入(input)是否为null, 并且可以基于标准的数据注解和自定义验证规则来检查输入中的属性是否合法。如果请求不合法,它将会抛出一个验证异常。
  • 审计日志- ABP会基于惯例和配置,自动为每一个请求记录访问的用户、浏览器、IP地址、调用的服务、方法、参数、调用时间、耗时、和其它一些信息。
  • 工作单元- 在ABP中,每个应用服务方法,都被默认视为一个工作单元. 在进入方法时,ABP会自动的打开连接并开启事务,如果方法在执行过程没有任何异常,并且成功完成,那么在退出方法时,ABP会自动提交事务并释放连接。不管方法中使用了一个还是多个仓储,他们都是原子的,在一个事务中,所有的实体改变都会在事务提交时自动保存。正如示例中所示,我们甚至都不用调用显示的 '_repository.Update(task)'方法来保存数据更新。 不过我个人建议尽管可以不显示调用更新,但是从代码的可读性和可维护性还是显示的调用'_repository.Update(task)'方法
  • 异常处理- 在ABP我们几乎不用手动的来处理异常,ABP会默认自动处理所有异常。如果有异常发生,ABP会自动的记录它,并返回合适的结果给客户端。例如,如果这是一个AJAX请求,它会返回一个JSON对象给客户端,并指明有一个错误发生。它会向客户端隐藏真实的异常,除非我们使用UserFriendlyException.
  • 日志- 我们可以使用基类中定义的Logger对象来写日志。 ABP默认使用Log4Net来写日志,当然我们也可以通过修改配置来使用其他的日志框架。
  • 本地化(多语言)- 在示例中,当抛出异常时,使用了"L"方法,它会根据用户文化配置自动进行本地化处理。
  • 自动映射- 在示例的最后一行,我们使用了ABP的MapTo扩展方法来讲输入对象的属性映射到实体对象的属性。它使用了AutoMapper库来执行映射,我们可以很容易的基于命名约定(简单来讲就是属性名相同,当然也可以指定)来将一个对象的属性来映射到另一个对象的属性。通常不同层都会定义自己的数据对象模型,而在层与层之间进行数据交换时,就设计到不同数据对象的转换,这个时候就是AutoMapper大显身手的好时机。
  • 动态API层- TaskAppService只是一个一般的类,通常我们需要写一个Web API Controller包装器来将TaskAppService的方法以API的形式暴露给客户端调用,但是ABP在运行时已经自动为AppService的方法生成了API接口,所以这样看起来,就像是客户端直接调用了AppService的方法(但实际不是)。
  • 动态Javascript AJAX代理- ABP在前端为应用服务的调用创建了代理方法,这样就可以在前端像调用Javascript方法一样调用应用服务。    

在示例中,我们可以看到使用ABP的优势,通常如果我们来做这些事情,会花费大量的时间,但是ABP框架都自动的为我们处理了

此外,除了这个示例中展示的ABP的优势以外,ABP还提供了一个健壮的基础架构和应用模型。包括模块化、多租户、缓存、配置管理、调度和后台任务、数据过滤、领域时间、单元测试和集成测试等等

标签:调用,框架,示例,介绍,ABP,input,TaskAppService,方法
From: https://www.cnblogs.com/lllxxxyyy/p/17672890.html

相关文章

  • 在GIn框架中使用JWT
    在gin框架中使用JWT JWT全称JSONWebToken是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。什么是JWT?JWT全称JSONWebToken是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多......
  • 字符编码的相关介绍
    字符编码的介绍前提知识了解字符编辑的介绍字符编辑的发展UTF-8的由来字符编码的应用编码和解码前提知识了解三大核心硬件所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘,我们需要明确三点#1、软件运行前,软件的代码及其相关数据都是存放于......
  • C#/.NET/.NET Core优秀项目和框架8月简报
    前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍、功能特点以及部分截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排......
  • 5G工业网关常见应用场景介绍
    5G工业网关是指基于5G网络技术的工业物联网网关设备,用于连接和管理工业设备和各个物联网子系统。它可以实现数据采集、远程监控、远程控制和数据传输等功能,广泛应用于工业自动化、智能制造、智能交通等领域。以下是一些5G工业网关的应用场景:  1、工业自动化:5G工业网关可以与......
  • Python中文版_Python中文版官方下载 中文版介绍
    python3软件介绍python是当今最流行的编程语言之一。它有广泛的领域和应用,从学习计算机科学的基础,到执行复杂或者直接的科学计算任务来创建游戏。它的高级应用甚至包含数据科学和量子计算。在新的版本中,python添加了独特且有价值的功能,同时删除了一些旧功能。我们可以将任何新软......
  • proteus下载-proteus8.7中文版下载「仿真软件」中文版介绍
    Proteus官方版是一款全球知名的EDA工具软件,同时Proteus官方版也是英国LabCenterElectronics公司研发推出的最新的版本,Proteus官方版不仅具备其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,可以说是目前最好的仿真单片机及外围器件的工具,目前已经深受国内单片机爱好者的追捧,......
  • 电路仿真软件Proteus中文版下载,Proteus2022最新版 中文版介绍
    ProteusPro仿真软件是LabcenterElectronics公司(中国总代理为广州风标电子技术有限公司)的EDA工具软件,是一款适用于单片机教学、单片机应用开发领域的专员人员使用的仿真软件。ProteusPro支持IAR、Keil和MPLAB等多种编译器,软件内的模型处理器支持多种类型的格式,是世界上著名单片机......
  • Python下载_Python免费版下载「编程工具」中文版介绍
    Python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python的名字来源于一个喜剧,也许最初设计Python这种语言的人并没有想到今天它会在工业和科研上获得如此广泛的使用。著名的自由软件作者EricRaymond在他的文章《如何成为一名黑客》中,将Python列为黑客应当学习的......
  • hal库中串口常用函数介绍
    串口常用函数介绍串口发送**/****接收函数:**HAL_UART_Transmit();串口发送数据,使用超时管理机制HAL_UART_Receive();串口接收数据,使用超时管理机制HAL_UART_Transmit_IT();串口中断模式发送HAL_UART_Receive_IT();串口中断模式接收HAL_StatusTypeDefHAL_UART_Transmit(UART_Ha......
  • ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍
    一、ARM和X86X86和ARM都是CPU设计的一个架构。X86用的是复杂指令集。ARM用的是精简指令集。指令集其实就是机器码,机器码上是汇编,汇编之上是程序语言例如java、c、c#。复杂指令集是在硬件层面上设计了很多指令,所以编程会简单些。精简指令集是在硬件层面上设计的指令比较少,所......