Abp vNext发布v2.3!

在全球范围内病毒笼罩的日子里,我们发布了ABP框架v2.3, 这篇文章将说明本次发布新增内容和过去的两周我们做了什么.

关于新冠病毒和我们的团队

关于冠状病毒的状况我们很难过.在Volosoft的团队,我们有不同国家的远程工作者在自己家里工作.从上周开始,我们已经完全开始在家远程工作,包括我们的主要办公室的员工.

我们相信并祈祷人类会在很短的时间内克服这个问题.

关于发布周期

从ABP v2.1.0开始,我们开始每两周的周四发布功能版本.本次是该决定后的第3次发布,我们看到这种方式目前运转良好,并提高了我们的灵活性.

我们将继续每两周发布功能版本(如v2.4,v2.5).另外,如果需要我们会随时发布热修复版本(如v2.3.1,v2.3.2).

ABP框架v2.3.0新增内容

我们已在这两周的开发周期内通过393次提交完成和合并了 104个issue和pull request.

我将介绍这个版本加入的一些新功能和改善.

React Native移动应用程序

我们终于完成了react native移动应用程序.目前,它可以让你登录,管理用户和租户.它利用ABP框架相同的设置,授权和本地化系统.

应用程序的一些截图:

它没有太多的功能,但它是你的移动应用程序一个完美的起点,因为它是完全集成到后端并支持多租户.

Angular TypeScript代理生成器

从我们的Angular应用程序中调用服务器中的REST端点是很常见的.这种情况下,我们一般创建服务(在服务器上包含各个服务的方法)和模型对象(对应服务器上的DTO).

除了手动创建这样的与服务器交互的服务外,我们可以使用像NSWAG工具来为我们生成服务代理.但是NSWAG有以下几个我们遇到的问题:

1.它产生一个大,单一的.ts文件;

2.当你的应用程序增长时,它变得太大了.

3.它不适合ABP框架的 模块化方式.

4.它创建了有点丑陋的代码.我们希望有一个干净的代码(就像我们手写的).

5.它不能生成服务器端声明的相同的方法签名(因为swagger.json不能准确地反映后端服务的方法签名).我们已创建了公开服务器端方法约定的端点,来允许客户端生成更好的客户端代理.

因此,我们决定创建一个ABP CLI命令来自动生成typescript客户端代理(#2222),用于在ABP框架中开发REST API.

它用起来很简单.只需要在你Angular应用程序的根文件夹运行以下命令

abp generate-proxy

它只会为你自己的应用程序的服务创建代理.它(默认)不会为你使用的应用程序模块创建代理.有几个选项.参见CLI文档.

复合主键的CRUD应用服务

CrudAppService是一个很有用的基类,用来为你的实体创建CRUD应用服务.不过,它不支持复合主键的实体. AbstractKeyCrudAppService是新开发的基类以支持复合主键的实体.更多信息请浏览文档.

添加模块的源代码

应用程序启动模板带有一些应用模块, 以Nuget和NPM包的方式预先安装了 .

这样做有几个重要的优点:

1.当新版本可用时, 你可以 轻松地升级 这些模块.

2.你的解决方案更干净,这样你就可以专注于自己的代码.

但是,当你需要对一个依赖的模块大量定制时,就不如它的代码在你的应用程序中那么容易.为了解决这个问题,我们引入了一个ABP CLI的新命令, 在你的解决方案中用代码替换Nuget包.用法很简单:

abp add-module --with-source-code

该命令以源代码方式添加模块, 或者如果模块已经以包引用方式添加了, 则替换为源代码.

建议在使用此命令前保存你的更改到源代码控制系统, 因为它会修改很多你的代码.

此外,我们也创建了文档来说明如何定制依赖的模块而不改变它们的源代码(见下面的部分).仍然建议以包的方式使用模块,以便在以后可以轻松升级.

免费模块的源代码是MIT许可,所以你可以自由更改它们并添加到您的解决方案中.

切换到预览版

ABP框架正在迅速发展,我们经常发布新版本.不过,如果你想更紧密地追随它,你可以使用每日预览包.

我们创建了一个ABP CLI命令来轻松地为你的解决方案更新到最新的预览包.在你的解决方案的根文件夹中运行以下命令:

abp switch-to-preview

它会修改所有ABP相关的NuGet和NPM包的版本.当你需要时你也可以切换回最新稳定版:

abp switch-to-stable

更多信息请浏览ABP CLI文档.

文档改进

扩展/定制依赖应用模块

我们创建了一个巨大的文档来说明如何定制模块依赖而不改变其源代码.参见文档.

除了文档以外,我们已经修订了所有模块(#3166),来使他们的服务更容易扩展和定制.

1.EF Core迁移指南

最近,我们创建了一个指南,说明ABP启动模板所使用的迁移系统. 该指南还介绍了如何定制迁移结构,拆分你的模块跨多个数据库,复用一个模块的表,等等.

2.从 ASP.NET Boilerplate迁移

如果你有建立在 ASP.NET Boilerplate的解决方案,我们创建了一个指南,试着帮助迁移你的解决方案到新的ABP框架上.

其他一些功能

1.框架

添加 IRepository.GetAsync和 IRepository.FindAsync方法(#3184).

2.模块

当创建新租户时获取管理员的密码和电子邮件地址,租户管理模块(#3088).

集成Elastic全文检索, 文档模块(#2901).

新的Quartz后台工作者模块(#2762)

3.示例

微服务演示添加多租户支持(#3032).

所有的功能, 改善和BUG修复, 请浏览发布说明.

下一步?我们未来几个月的目标如下:

完成文档和示例,写更多的教程.

使框架和现有模块的更加可定制和可扩展.

集成gRPC和为所有预置模块实现gRPC端点(#2882).

为ABP框架创建Blazor UI, 并在所有模块和启动模板中实现它(#394).

为预置模块添加新功能,并为ABP商业版创建新模块.

更多细节请浏览GitHub里程碑.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中间件分类

ASP.NET Core 中间件的配置方法可以分为以上三种,对应的Helper方法分别是:Run(), Use(), Map()。Run(),使用Run调用中间件的时候,会直接返回一个响应,所以后续的中间件将不会被执行了。Use(),它会对请求做一…

redis持久化到mysql的方案_redis进阶: 数据持久化

redis是内存数据库,即数据库状态都是存储于内存中,因此,当服务器重启或者断开后,数据便会丢失;为了解决数据丢失问题,便需要将数据从内存保持到磁盘中,这就是redis的数据持久化目前,…

如何创建一个自定义的`ErrorHandlerMiddleware`方法

在本文中,我将讲解如何通过自定义ExceptionHandlerMiddleware,以便在中间件管道中发生错误时创建自定义响应,而不是提供一个“重新执行”管道的路径。作者:依乐祝译文:https://www.cnblogs.com/yilezhu/p/12497937.htm…

mysql or中有空查询慢_MySQL 慢查询日志

1.定义2.相关参数2.开启3.原因4.慢查询日志工具mysqldumpslow1.定义作用:用来记录在MySQL中响应时间超过阀值的语句。2.相关参数mysql> show variables like %slow_query%;------------------------------------------------------------| Variable_name | Value …

从业务需求抽象成模型解决方案

从业务需求调研,通过抽象转换成模型技术方案,本文将对这个过程做个拆解,供大家参考。以下我所说的可能都是错的,只是一家之见,欢迎大家在留言区多提意见和看法,互相共勉。一、订单对象-信息需求公司的运营都…

《C++ Primer》7.1.4节练习

练习7.11: #include <iostream> #include <cstring> using namespace std;class Sales_data {public:Sales_data() default;Sales_data(const std::string &book): bookNo(book) {}Sales_data(const std::string &book, const unsigned num, const doubl…

DotNetCore Web应用程序中的Session管理

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者简介&#xff1a;Jon&#xff08;Jonathan&#x…

css3是什么 ptml_CSS3

CSS3HTMLCSSJavaScript结构表项交互如何学习&#xff1f;CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字、阴影、超链接、列表、渐变...)盒子模型浮动定位网页动画(特效效果)1、初识CSS1.1、什么是CSSCascading Style Sheet(层叠样式表)CSS&#xff1a;表现(美…

python docx runs_别再问我Python怎么操作Word了!

安装docx是一个非标准库&#xff0c;需要在命令行(终端)中使用pip即可安装pip install python-docx一定要注意&#xff0c;安装的时候是python-docx而实际调用时均为docx!前置知识Word中一般可以结构化成三个部分&#xff1a;文档Document段落Paragraph文字块Run也就是Document…

【要闻】如何基于K8s管理1600个微服务?某数字化银行秘诀公开

Cloud Foundry Foundation宣布KubeCF为新孵化项目Cloud Foundry Foundation是开放源代码项目的聚集地&#xff0c;简化了开发人员的体验&#xff0c;近日其宣布&#xff0c;KubeCF已成为该基金会的孵化项目&#xff0c;并已发布版本1.0.1。KubeCF是Cloud Foundry应用程序运行时…

如何用 Blazor 实现 Ant Design 组件库?

本文主要分享我创建 Ant Design of Blazor 项目的心路历程&#xff0c;已经文末有一个 Blazor 线上分享预告。Blazor WebAssembly 来了&#xff01;Blazor 这个新推出的前端 Web 框架&#xff0c;想必是去年 .NET Core 3.0 发布时才进入 .NET 开发者的视线的。但其实&#xff0…

.NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记...

28 | 工作单元模式&#xff08;UnitOfWork&#xff09;&#xff1a;管理好你的事务工作单元模式有如下几个特性&#xff1a;1、使用同一上下文2、跟踪实体的状态3、保障事务一致性我们对实体的操作&#xff0c;最终的状态都是应该如实保存到我们的存储中&#xff0c;进行持久化…

《C++ Primer》7.3.2节练习

练习7.27: #include <iostream> #include <cstring> using namespace std;class Screen {private:unsigned height 0, width 0;unsigned cursor 0;string contents;public:Screen() default;Screen(unsigned ht, unsigned wd): height(ht), width(wd), conten…

【实战 Ids4】║ 控制台密码模式搭配Ocelot网关

&#xff08;此岁只能云赏樱了&#xff09;书接上文&#xff0c;这些天一直在研究IdentityServer4&#xff08;下文简称Ids4&#xff09;框架&#xff0c;发现有很多有意思&#xff0c;或者说比我想象中的知识点&#xff0c;可扩展的多&#xff0c;所以比较开心能钻研进去&…

《C++ Primer》7.3.3节练习

练习7.31: 满足题意的程序如下所示&#xff1a; class X;//声明类型X class Y//定义类型Y {X* x; }; class X//定义类型X {Y y; };类X的声明称为前向声明&#xff0c;它向程序中引入了名字X并且指明X是一种类类型。对于类型X来说&#xff0c;此时我们已知它是一个类类型&#…

.NET Core 如何生成信用卡卡号

点击上方蓝字关注“汪宇杰博客”导语上个月我写了《.NET Core 如何验证信用卡卡号》&#xff0c;不少朋友表示挺有兴趣。在金融科技行业的实际工作中&#xff0c;通常还需要生成信用卡卡号用来测试&#xff0c;今天我就来教大家如何生成信用卡卡号。上回的改进上篇文章写完后&a…

python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据

前言本文利用python的scrapy框架对虎牙web端的主播、主播订阅数、主播当前观看人数等基本数据进行抓取&#xff0c;并将抓取到的数据以csv格数输出&#xff0c;以及存储到mongodb中思路观察虎牙网站后确认所有频道url都在www.huya.com/g中的&#xff0c;而主播房间数据则是ajax…

《C++ Primer》7.3.4节练习

练习7.32: 要想让clear函数作为Screen的友元&#xff0c;只需要在Screen类中做出友元声明即可。本题的真正关键之处是程序的组织结构&#xff0c;我们必须首先定义Window_mgr类&#xff0c;其中声明clear函数&#xff0c;但是不能定义它&#xff1b;接下来定义Screen类&#xf…

.NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记

29 | 定义仓储&#xff1a;使用EF Core实现仓储层首先定义仓储层的接口&#xff0c;以及仓储层实现的基类&#xff0c;抽象类仓储层的接口namespace GeekTime.Infrastructure.Core {/// <summary>/// 包含普通实体的仓储/// 约束 TEntity 必须是继承 Entity 的基类&#…

ueditor单图上传iframe跨域_UEditor单图上传(simpleupload)跨域问题解决方案

代码实现首先我们需要在ueditor.all.js文件中找到原本的单图上传部分的代码搜索关键字 simpleupload&#xff0c;如下图所示&#xff1a;然后找到上传图片的代码片段&#xff0c;如下图所示&#xff1a;然后把 domUtils.on的 input 绑定的事件注释掉或删除掉替换成以下代码:inp…