.Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定。

5.0版本新特性

新特性列表:

  • 静态 C# 和 JavaScript 客户端代理
  • 分布式事件总线支持事务收件箱&发件箱模式
  • 在事务中发布事件
  • 禁用用户
  • 租户邮箱设置
  • 仪表板授权控制
  • AbpControllerBase 基类
  • 自动设置新实体 TenantId 属性值

静态(生成) C# 和 JavaScript 客户端代理

动态 C# 和 JavaScript 客户端代理是ABP框架最受欢迎的特性之一。动态代理在运行时生成代理代码,并使客户端到服务端的调用变得简单。在 ABP Framework 5.0 中,提供了另一种方法:可以在开发时生成客户端代理代码。

静态代理的优点:

  • 性能提升,因为不需要在运行时获取 HTTP API 定义信息。
  • 项目解耦,以微服务架构为例,API 网关应用直接使用静态代理,所以不需要在项目中添加对应的微服务 HTTP API 层的引用。动态代理方式,需要先从 API 网关返回一个 HTTP API 定义组合,所以需要在网关添加微服务 HTTP API层的引用。

静态代理的缺点:当 API 终结点定义发生改变时,需要重新生成客户端代理代码。

至于使用哪种代理方式,需要结合项目实际情况进行选择。是的,软件开发中没有“完美技术”,总是需要权衡利弊,适合才是最好的。

分布式事件总线支持事务收件箱&发件箱模式

这应该是分布式系统开发人员最期待的特性之一。(至此,使用 ABP Framework 开发分布式系统的基础设施已经完备!)

事务发件箱模式用于在操作应用程序数据库的同一个事务中发布分布式事件。

当数据发生变化时,分布式事件被保存在同一个事务中的数据库中,然后由一个独立的后台工作进程发送给消息代理,如RabbitMQ或Kafka,支持失败重试机制。通过这种方式,确保数据库状态和已发布事件之间的一致性。

事务收件箱模式,确保数据库状态已接收事务之间的一致性。首先将接收的事件保存到数据库,然后在事务中执行事件处理程序同时从收件箱队列中移除事件。通过将处理过的消息保留一段时间,并丢弃从消息代理接收到的重复事件,确保事件只执行一次。

在应用程序中,启用收件箱和发件箱模式需要一些手动步骤。可以参看控制台应用程序示例

在事务中发布事件

前面介绍的特性(发件箱和收件箱模式)解决分布式系统事务发布事件问题。事务中发布事件这一功能,解决在非分布式应用程序发布事件的同一事务中执行事件处理程序的问题。在 5.0 中,所有事件(本地或分布式)在相同事务中处理。任何处理程序执行失败,该事务都会回滚。如果不希望触发回滚,可以使用 try/catch 捕获并忽略事件处理程序中的异常。

有一点需要清楚的是如果系统中并没有集成分布式事件提供程序,如 RabbitMQKafka,那么分布式事件总线将在进程内执行,此时就像本地事件一样。因此,无论系统是分布式或非分布式,所有事件都变成事务性的。

以上处理都是默认进行的。有一个与此更改相关的弃用说明(一些预定义的事件将在下一个主版本中删除,已经不再需要了)。

禁用用户

Identity 应用模块新增禁用/启用用户功能,对应添加和编辑用户对话框中 Active 复选框,禁用操作实现禁止用户登陆系统而不删除用户数据。

这项功能在AbpUsers表中添加新字段,所以需要添加新的数据迁移。

租户邮箱设置

如果是创建多租户应用,现在支持为每个租户单独进行邮件发送设置。为了使设置可用,首先需要为租户设置对应功能权限:

勾选租户邮件设置权限:

在开发环境,登出,切换到租户并使用租户管理员登陆,点击 Administration -> Settings 菜单,可以看到邮件设置:

仪表板授权控制

ABP可以集成 Hangfire 作为后台作业工作者,Hangfire 仪表板用于监控和控制后台作业队列,参看仪表板截图:

Hangfire仪表板默认无需授权即可访问,任何用户可通过 /hangfire URL查看和控制作业。在 ABP 5.0 版本中,为Hangfire 仪表板添加内置授权过滤器AbpHangfireAuthorizationFilter。使用如下示例代码代替 app.UseHangfireDashboard(); 实现:

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() }
});

添加过滤器之后,只有授权用户能够查看仪表板,当然,建议设置一个权限名称,只有拥有该权限的用户可以查看仪表板:

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AsyncAuthorization = new[] {
new AbpHangfireAuthorizationFilter("MyPermissionName")
}
});

上面示例将Hangfire 仪表板权限定义名为 MyPermissionName ,使用框架权限系统。

AbpControllerBase 基类

ABP 提供 AbpController 类作为 MVC 控制器的继承基类,在控制器中通过依赖注入提供常用的服务,以此简化控制器的编写。在 5.0 版本中,提供第二个控制器基类 AbpControllerBase ,不包含视图功能,用于创建 API 控制器。在开发 API 控制器,建议使用 AbpControllerBase 代替 AbpController 类。

示例:创建 API 控制器

[Route("api/products")]
public class ProductController : AbpControllerBase
{
// TODO: ...
}

自动设置新实体 TenantId 属性值

在 5.0 版本中,当你创建一个新实体对象(实现 IMultiTenant 接口)时,ABP 在 Entity 基类构造函数中自动设置 TenantId ,所有实体和聚合根基类都继承 Entity 类。TenantId 设置为当前租户 ICurrentTenant.Id 属性值。

之前,由开发者为新实体设置 TenantId 值,现在交给 ABP 自动处理,仅在需要设置为其他租户Id时手动设置。

在极少数情况下,需要注意这个变更,比如:从一个租户上下文创建 host 端实体,不需要明确地设置 host 实体 TenantId 属性为 null

主要变更说明

  • 升级到 .Net 6.0
  • 升级到 Bootstrap 5
  • IRepository 不再继承 IQueryable 接口
  • MVC / Razor Pages UI 移除对 gulp 打包依赖,使用 abp-install-libs 代替。
  • 弃用 EntityCreatingEventData, EntityUpdatingEventData, EntityDeletingEventDataEntityChangingEventData

欢迎加入 ABP Framework 研习社(QQ群:726299208)

专注 ABP Framework 学习,经验分享、问题讨论、示例源码、电子书共享!关注 ABP Framework 最新开发进度,后面还会陆续发布新功能详解新功能示例等系列文章,敬请关注!

转载出处:https://www.cnblogs.com/YGYH/p/15571635.html (编程悟道)

翻译原文:ABP.IO Platform 5.0 RC.1 Has Been Released

dotNET兄弟会-公众号

专注.Net开源技术及跨平台开发!致力于构建完善的.Net开放技术文库!为.Net爱好者提供学习交流家园!

ABP Framework 5.0 RC.1 新特性和变更说明的更多相关文章

  1. ABP Framework 5.2 RC 发布及新增功能介绍

    ABP Framework 5.2 RC 新增功能 目录 ABP Framework 5.2 RC 新增功能 单层解决方案模板 EF Core 数据库迁移 UI 和 数据库 选项 API 版本控制 源 ...

  2. Spring Boot 2.0正式发布,新特性解读

    作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...

  3. C# 6.0可能的新特性及C#发展历程

    据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...

  4. NET Framework 4.5 五个新特性

    .NET Framework 4.5 五个新特性 Framework 4.5 已经开发了几个项目了,想去研究一下VS 2015 里面的跨平台..不过好像4.5内核新特性还没搞明白呢还是先看看4.5内核 ...

  5. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结

    Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...

  6. c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

    引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...

  7. 转载——C# 6.0可能的新特性及C#发展历程

    据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...

  8. 有史来最大改变 Android 5.0十大新特性

    有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 )   距离Android系统上一次重大更新不到一年的时间,谷歌 ...

  9. C# 6.0可能的新特性

    C# 6.0可能的新特性 1.主构造函数(Primary Constructors) 主构造函数给类中的变量赋值 Before public class Point { private int x, ...

随机推荐

  1. ping探测与Nmap扫描

    一.实验目的 学习信息收集的一般步骤 学会使用ping命令 利用Nmap工具进行信息搜集 二.实验环境 系统环境:一台windows7系统.一台XP系统.一台kali系统 软件环境:安装Wiresha ...

  2. 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建

    从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...

  3. Java到底怎么学?

    你现在是不是想学Java,但很迷茫不知该从何下手,那么请认真看完这篇文章,希望对你有所帮助! 作为零基础刚刚接触Java的朋友们来说,我的建议还是先看视频,虽然有很多人说看视频学习慢,建议直接买优秀的 ...

  4. cvechecker 漏洞扫描工具部署及效果展示

    cvechecker 漏洞扫描工具部署及效果展示 介绍 cvechecker的目标是通过扫描已安装的软件并将结果与CVE数据库进行匹配来报告系统上可能存在的漏洞. 官方提示: 可能会产生许多误报(漏洞 ...

  5. NX二次开发-调内部函数UGS::UICOMP_enum::set_width(int)更改BlockUI的枚举控件宽度

    版本 NX11+VS2013 内容说明 这个内部函数的设置方法,我之前不会,是QQ群里的一位大佬分享出来的. 关于这块,我也百度搜了一下,找到了几个相关的. 1.直接手动修改BlockUI界面 在低版 ...

  6. change or reset WSL password

    change or reset WSL password To change or reset your password, open the Linux distribution and enter ...

  7. Java:NIO 学习笔记-1

    Java:NIO 学习笔记-1 说明:本笔记是根据bilibili上 尚硅谷 的课程 NIO视频 而做的笔记 主要内容 Java NIO 简介 Java NIO 与 IO 的主要区别 缓冲区(Buff ...

  8. 从0到1使用Kubernetes系列(四):搭建第一个应用程序

    传统Kubernetes应用搭建 创建Namespace 在一个Kubernetes集群中可以创建多个Namespace进行"环境隔离",当项目和人员众多的时候,可以考虑根据项目的 ...

  9. 《基于SD-SEIR模型的实验室人员不安全行为传播研究》

    My Focus:基于SD-SEIR模型的实验室人员不安全行为的传播; 建模与实验仿真 Title: Study on Porpagation of Unsafe Bhavior of Laborat ...

  10. linux ar

    转载:Linux ar命令 | 菜鸟教程 (runoob.com) Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件. ar可让您集合许多文件,成为单一的备存文件.在备存文件中,所 ...