.NET5 ABP框架(一)

摘要:
授权-ABP可以以声明的方式检查权限。如果发生异常,ABP将自动记录并向客户机返回适当的结果。默认情况下,ABP使用Log4Net写入日志。当然,我们也可以通过修改配置来使用其他日志框架。除了本示例中显示的ABP的优点之外,ABP还提供了一个健壮的基础架构和应用程序模型。

https://aspnetboilerplate.com/

https://github.com/aspnetboilerplate/aspnetboilerplate

https://aspnetboilerplate.com/Pages/Documents/Zero/Startup-Template-Core

框架特点
  • 依赖注入 - 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还提供了一个健壮的基础架构和应用模型。包括模块化、多租户、缓存、配置管理、调度和后台任务、数据过滤、领域时间、单元测试和集成测试等等。它让我们可以集中关注在业务实现上,而不用重复的去造轮子

官网下载

https://aspnetboilerplate.com/Templates

.NET5 ABP框架(一)第1张

项目结构

.NET5 ABP框架(一)第2张

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 的内存数据库,不影响实际数据库内容。

设置启动项,修改appsettings 

.NET5 ABP框架(一)第3张

.NET5 ABP框架(一)第4张

创建数据表

程序包管理器控制台并运行Update-Database命令以创建数据库

.NET5 ABP框架(一)第5张

还原Libman

右键单击libman.json文件。然后单击“还原客户端库”。

.NET5 ABP框架(一)第6张

运行并登录

用户名admin,密码为123qwe

其它

框架介绍:https://www.cnblogs.com/wuhuacong/p/10919020.html

框架特点:https://www.cnblogs.com/lcyhjx/p/8688880.html

免责声明:文章转载自《.NET5 ABP框架(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GERBER文件开源跳板机jumpserver的安装部署和使用详细教程及踩坑经验下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JetBrainstorm激活方式(持续更新)

 JetBrainstorm家族 2019年版本 亲测:2019.3.2 | 2019.1.3 1. 先下载压缩包解压后得到jetbrains-agent.jar,把它放到你认为合适的文件夹内。 下载页面:https://zhile.io/2018/08/17/jetbrains-license-server-crack.html 2. 启动你的IDE,如...

全网最全开源工业缺陷数据集汇总(已更新24个)

https://zhuanlan.zhihu.com/p/195699093 欢迎大家关注我的公众号:一刻AI http://weixin.qq.com/r/kChDW_bEAbt_raI4932C (二维码自动识别) 本文目前汇总了常见的24个开源工业缺陷数据集,持续更新中 (欢迎大家留言补充,共同建设一个为大家提供便利的文章) 1、东北大学热轧带钢表面...

C#开源大全

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow 【免费】正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Co...

GJK碰撞检测算法

https://blog.lufei.so/#/collisionDetection/GJK/1 https://blog.lufei.so/#/collisionDetection/GJK/2 现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图。在二进制的世界里,一切就没这么直观了。 GJK(Gilbert-Johnson-Keerthi...

iframe用法总结

<p><iframe>是框架的一种形式,也比较常用到。 </p><div class="blogstory"><p><span style="font-size:18px;"><span style="color:#0000ff;"><span style="font...

SpringBoot 学集 (第三章) 日志框架

写在前面:分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~ 编程路漫漫,学习无止尽! 目录 日志框架 SLF4j使用 统一日志记录 SpringBoot日志关系总结 日志框架的使用; 日志的级别 SpringBoot修改日志的默认配置 日志输出格式: 指定配置 常见错误及其异常①log4j中Logger.getLogger(...