ABP框架 - 介绍

2023-11-07

文档目录

 

本节内容:

 

简介

我们总是对不同的需求开发不同的应用。但至少在某些层面上,一次又一次地重复实现通用的和类似的功能。如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能。所以我们创建架构和最佳实践,如分层模块架构DDD依赖注入等,并尝试开发应用时基于一些约定。

 

由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错。但不是所有的公司都是幸运的,大部分公司没有时间,预算和团队来开发好的框架。他们甚至都没有可能创建一个框架,因为编写文档,培训开发人员和维护框架都是非常困难的。

 

ASP.NET Boilerplate (ABP) 是一个开源并且有丰富文档的应用框架,开发宗旨是:“为所有公司,所有开发人员,开发出一个通用框架!”,而且不只是一个框架,同时提供一个强大的基于DDD的构架模型和最佳实践。

 

一个快速示例

让我们从一个简单的类来体会一下ABP带来的便利:

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

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

    [AbpAuthorize(MyPermissions.UpdatingTasks)]
    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("CouldNotFoundTheTaskMessage"));
        }

        Input.MapTo(task);
    }
}

示例里我们看到一个应用服务方法,在DDD中,应用服务方法是在表示层执行应用的用户用例的。我们可以想成UpdateTask方法是被Ajax调用。让我们看看ABP带来的便利:

  • 依赖注入:ABP使用并提供一个强大而且符合约定的DI框架。上述的应用服务,按照约定临时的(每个请求Request创建一个)注册到DI容器,它能简单地注入所有依赖项(如示例中的Irepository<Task>)。
  • 仓储:ABP能为每个实体创建一个默认的仓储(如示例中的Irepository<Task>)。默认仓储包含许多有用的方法,如示例中的FirstOrDefault方法。我们可以根据需要,很容易地扩展默认仓储。仓储抽象了DBMS和ORM以及简化了数据访问逻辑。
  • 授权:ABP可以检查许可。如果当前用户没有“updating task”权限或是未登录,ABP就会阻止他们访问UpdateTask方法。用陈述性的特性来简化授权,当然还有另外的授权方式。
  • 验证:ABP自动检查input是否为null。根据标准的数据注释特性和自定义验证规则,检查一个input的所有属性。如果请求没有通过验证,会抛出一个对应的验证异常。
  • 审计日志:根据约定和配置,每个请求的用户、浏览器、Ip地址、调用服务、方法、参数、调用时间、执行耗时和其它的一些信息会被自动地保存下来。
  • 工作单元:在ABP里,每个应用服务方法都默认地被认定为一个工作单元。在方法开始前,它自动创建一个连接并开启一个事务。如果方法成功完成,接着事务会被提交并释放连接。即使是使用不同的仓储或是方法,它们都可以是原子性(事务性)的,并且当事务提交时实体中所有的修改都自动地被保存。因此,如同示例所示,我们甚至不需要去调用_repository.Update(task)方法。
  • 异常处理:我们几乎不用在一个使用ABP的Web应用中写异常处理。所有的异常都自动地被默认处理。当一个异常发生,ABP自动记录它并返回一个对应的结果给客户端。例如,一个AJAX请求,它会返回一个Json对象给客户端,告知发生了一个错误。如示例所示,UserFriendlyException可以向客户端隐藏具体的异常,显示友好信息。它同样可以在客户端理解并处理客户端错误,并向用户显示对应的信息。
  • 日志:如你所见,我们可以用定义在基类中的Logger对象写日志。默认使用Log4Net,不过这是可修改和可配置的。
  • 本地化:请注意我们在抛出异常时,使用了L方法。因此,它可自动依据用户区域,使用相应的本地化信息。当然,我们需要在某处定义CouldNotFoundTheTaskMessage(更多信息参见“本地化”文档)。
  • 自动映射:最后一行代码,我们使用ABP的MapTo扩展方法来映射input属性到实体属性。它使用AutoMapper库来执行映射。因此,我们可以简单地基于命名约定,从一个对象映射到另一个。
  • 动态Web API 层:实际上TaskAppService是一个简单的类(甚至是不需要从ApplicationService继承)。我们通常包装一个Web API 控制器为Javascript客户端公开方法,ABP会在运行时自动地完成这件事。因此,我们可以直接在客户端使用应用服务。
  • 动态Javascript AJAX 代理:ABP创建Javascript代理方法,以便就本地调用一样,来调用应用服务。

通过这么一个简单类我们能看到ABP的便利。完成这些任务一般来说都是很费时的,但是所有的一切,ABP都自动处理了。

 

其它特性

除了示例所示,ABP提供了一个强大的基础架构和应用模型,下列为ABP的其它特性:

  • 模块化:提供一个强大的基础架构来创建可重用的模块。
  • 数据过滤:提供自动地数据过滤来实现一些模式,像软删除和多租户。
  • 多租户:完全地支持多租户,包含单数据库或每租户一个单独数据库。
  • 设置管理:提供一个基础架构来读取/修改应用、租户和用户级别的设置。
  • 单元和集成测试:以可测试为宗旨,当然提供基础类来简化单元测试和集成测试。点击查看更多相关信息

查看文档了解所有功能。

 

启动模板

开始一个新的解决方案、创建层、安装nuget包、创建一个简单的布局和菜单...所有这些都是耗时的工作。

ABP提供预创建的启动模板,使开始一个新的解决方案更简单。模板支持SPA(单页面应用)和MPA(多页面MVC应用)结构。同时允许我们使用不同的ORM工具。

 

如何使用

ABP开源项目在Github上,分发在Nuget上。“启动模板”是使用ABP的最简单方式(按文档所述操作)。

 

kid1412附:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/Introduction

转载于:https://www.cnblogs.com/kid1412/p/5971842.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ABP框架 - 介绍 的相关文章

随机推荐

  • 应用于电力计能表的RFID仓储管理系统

    1 应用背景 电力计量中心是电力行业的电能计量检测机构 承担辖区内电能计量器具安全生命周期管理的职能 包括采购 仓储 检测 配送 安装 运行监测等各个环节 随着城网改造和居民一户一表工作的深入进行 电力新装用表数量急剧增加 传统的计量中心难
  • 夏普SHARP AR-2818 一体机驱动

    夏普SHARP AR 2818 一体机驱动是官方提供的一款一体机 打印 扫描 驱动 本站收集提供高速下载 用于解决一体机与电脑连接不了 无法正常使用的问题 本动适用于 Windows XP Windows 7 Windows 8 Windo
  • 干货分享丨Java开发稳步进阶之JVM内存区域,看完记得收藏!

    Java语言最重要的特点之一 跨平台使用 正是由于JVM的存在 想要Java开发稳步进阶 学JVM这条路绕不开 1 为什么要学JVM 我们都知道 要做Java开发 必须在你的电脑上安装JDK才行 安装JDK之后里面会有一个JRE的目录 JR
  • PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '',-java.lang.Exception

    转https stackoverflow com questions 29117679 spring transactional management propagation required isolation default DEBUG
  • C语言——判断密码复杂程度

    题目 编写一个函数 传入密码 判断密码复杂程度 判断密码是否包含大写 小写 数字 解题思路 我们设定若包含大写 小写 数字其中一类为简单 包含两类为中等 三类为复杂 暂时不考虑其他字符的出现 我们预先设定密码为 Maobing520 主函数
  • layui分页遇到的问题及button和input的区别

    参考文献 漂亮分页样式和代码 http layui shagua wiki layuidoc demo laypage html 按钮input和代码 http www shagua wiki project 3 p 84
  • idea 运行vue项目,修改vue代码后,不起左右。删掉.idea重新导入就好了

    这是第二次修改vue代码后不起作用了 不知道idea2019怎么搞的 删掉 idea重新导入就好了 附 要vue 3 0及以上 才有public目录 2 x没有
  • C++-Z字扫描实现(Zigzag Scan)

    Z字扫描 Zigzag Scan 将二维矩阵压缩成行输出 int index 0 for int i 0 i
  • 使用FastGithub,告别无法访问Github

    FastGithub github定制版的dns服务 解析github最优的ip 源代码开源在github 加速原理 多种渠道获取github的ip github公开的ip 各dns服务器提值的ip ipaddress com反查的ip 轮
  • JavaScript的关键字详解

    1 abstract 抽象的 2 continue 用于跳过循环中的一个迭代 并继续执行循环中的下一个迭代 3 finally 在 try 和 catch 之后无论有无异常都会执行 4 instanceof 5 private 6 fals
  • Mac流程图工具-StarUML介绍

    转载请注明来源 作者 loongshawn http blog csdn net loongshawn article details 78786685 建议读者阅读原文 确保获得完整的信息 1 背景说明 推荐一款Mac流程图工具 效果如下
  • FIFO最小深度计算

    FIFO最小深度计算 文章目录 1 FIFO最小深度 2 示例分析 1 FIFO最小深度 在数据的传输中当读速率慢于写速率时 FIFO便可被用作系统中的缓冲元件或队列 类似于水流经过一个缓冲区 上游水流速度快 下游水流速度慢 部分水就可以被
  • 05-----关于C++使用VS时出现 error C2248: “xxx“ 无法访问private成员(在“MySpdlog“类中声明)

    一 问题描述 项目中遇到一下问题 需要写个测试程序 但是在搭建的过程中 出现错误的 心想 代码一样的 怎么就报错了呢 于是开始查找问题 错误如下 因为我的测试程序文件不算多 就5个 代码也不多 于是我使用软件进行对比正确的代码和错误的代码
  • uniapp 之 微信小程序、支付宝小程序 对于自定义导航栏的不同

    目录 前言 微信小程序 代码 支付宝小程序 首页配置文件 二级菜单页面 配置 总结 不同 相同 前言 小程序都是 uni app 写的 不是原生 微信小程序 代码 pages json文件中配置 重点 navigationStyle cus
  • 电磁兼容测试分析软件软件,电磁兼容测试方案的主要应用

    汽车制造商必须保证汽车的无用杂散处于规定界限范围内 EMI 同时 要保证汽车能够抵抗来自外部和内部源的骚扰 EMS 例如电视发射机 移动基站或其他电子汽车组件 作为该领域的全球领导者 罗德与施瓦茨提供高效的测试解决方案 确保您的产品符合电磁
  • 恢复hosts文件

    因破解GoLand需要 得修改hosts文件 打开目录 C Windows System32 drivers etc 尼玛 hosts文件怎么没有了 什么局面 手动恢复hosts文件 窗口键 X 运行 cmd打开控制台 输入命令 for f
  • MySQL的bin目录去哪里了

    方法一 点开始 运行 输入 services msc 在打开的 服务管理器 中找到mysql并双击 会弹出来个属性框框 常规 选项卡里面有个 执行路径 从这个路径你就可以看到它的bin目录在哪 很多人没有找到框 再次更新一下 方法二 打开任
  • 小米造车150天:烈火烹油第一枪

    贾浩楠 发自 凹非寺量子位 报道 公众号 QbitAI 小米官宣造车 小米开启智能驾驶招聘 小米7737万美元收购深动科技 小米汽车正式完成工商注册 落户北京亦庄 入局5个月 这是小米造车的一系列进展 还没算上2万多简历 300人团队 大量
  • IOS上架流程详解,包含审核避坑指南!

    准备 开发者账号 完工的项目 上架步骤 一 创建App ID 二 创建证书请求文件 CSR文件 三 创建发布证书 CER 四 创建Provisioning Profiles配置文件 PP文件 五 在App Store创建应用 六 打包上架
  • ABP框架 - 介绍

    文档目录 本节内容 简介 一个快速示例 其它特性 启动模板 如何使用 简介 我们总是对不同的需求开发不同的应用 但至少在某些层面上 一次又一次地重复实现通用的和类似的功能 如 授权 验证 异常处理 日志 本地化 数据库连接管理 设置管理 审