.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. FastAPI(45)- JSONResponse

    背景 创建 FastAPI 路径操作函数时,通常可以从中返回任何数据:字典.列表.Pydantic 模型.数据库模型等 默认情况下,FastAPI 会使用 jsonable_encoder 自动将该返 ...

  2. mysql8.0.20下载安装教程

    mysql8.0.20安装教程 1.浏览器搜索mysql下载安装 地址:https://dev.mysql.com/downloads/mysql/ 2.登录或者不登录下载 3.下载的是一个压缩包,直 ...

  3. 当一个 Pod 被调度时,Kubernetes 内部发生了什么?

    在 Kubernetes 中,调度是指将 Pod 放置到合适的 Node 上,然后对应 Node 上的 Kubelet 才能够运行这些 Pod . kube-scheduler 是集群控制平面的主要组 ...

  4. 学习Tomcat(七)之Spring内嵌Tomcat

    前面的文章中,我们介绍了Tomcat容器的关键组件和类加载器,但是现在的J2EE开发中更多的是使用SpringBoot内嵌的Tomcat容器,而不是单独安装Tomcat应用.那么Spring是怎么和T ...

  5. PTA实验7-2-3 求矩阵的局部极大值 (15分)

    实验7-2-3 求矩阵的局部极大值 (15分) 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值.本题要求给定矩阵的全 ...

  6. 项目优化之v-if

    前言: 在vue项目中,由于功能比较多,需要各种条件控制某个功能.某个标签.表格中的某一行是否显示等,需要使用大量的v-if来判断条件. 例如: <div v-if="isShow(a ...

  7. 92.反转链表II

    题目 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 . ...

  8. [软工顶级理解组] 团队任务拆解(Alpha)

    一.任务概述 在alpha阶段,我们需要完成功能规格说明书中所提到的所有功能,在一个阶段的开发周期内,交付最小可行的可用版本. 二.任务分配及时长 分组&成员 具体任务 预计时长(小时) 前端 ...

  9. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...

  10. hystrix的配置说明

    在我们的日常开发中,有些时候需要和第三方系统进行对接操作,或者调用其他系统的 api 接口,但是我们不能保证这些第三方系统的接口一定是稳定的,当系统中产生大量的流量来访问这些第三方接口,这些第三方系统 ...