ABP框架v2.0 和 ABP商业版

ABP框架2.0版已经在本周公布.这篇文章解释了为什么我们发布了一个抢先主版本,和2.0版本中的变化.

除了v2.0版本,我们很高兴地宣布ABP商业版,这是建立在开源ABP框架的之上的一套专业的模块,工具,主题和服务.

ABP框架V2.0

为什么2.0,而不是1.2?

本来在V1.1.2发布后计划发布1.2版.然而,有报告称1.x版在Linux上有一些性能和稳定性问题,尤其是当应用程序部署在低配CPU和内存的Linux容器上.

我们深入研究了这一问题,并已查明问题的根本原因与拦截async方法的实现有关.此外,也有一些 asyncsync 的用法影响了线程池的优化.

最后,在社区在大力协助下我们解决了所有的问题.但是,我们也有一些重要的设计决策导致了一些破坏性变更,因为语义版本,我们不得不改变框架的主版号.

大多数的应用程序不会受到破坏性变更的影响,或者只需要做一些微小的修改.

破坏性变更

删除了一些同步的API

一些拦截器需要使用async的API.当他们拦截sync方法时,他们需要调用asyncsync.这最终导致了asyncsync的问题.这就是为什么我们删除了一些同步的API.

当你需要在async方法中调用sync方法时, asyncsync 这种模式是C#一个经典问题.虽然有一些解决方法,但是都有相应的缺点,并建议不要写这样的代码.你可以在网上找到关于这一话题的许多文档.

为了避免这个问题,我们已经移除:

  • sync仓储方法 (如insertupdate, 等...),

  • sync工作单元API,

  • sync后台作业API,

  • sync审计日志API,

  • 其他一些很少使用的syncAPI.

如果你遇到了编译错误,只需使用这些API的async版本.

始终async!

从v2.0开始,ABP框架假设你以async方式编写你的应用程序代码.否则,一些框架的功能可能无法正常工作.

建议你的所有应用服务, 仓储方法, 控制器动作(ontroller actions), 页面处理器(page handlers)都是async.

即使你的应用服务方法并不需要是async,也将其设置为async,因为拦截器需要执行async操作(授权,工作单元等).你可以在不调用async的方法中返回Task.Completed.

示例:

public Task<int> GetValueAsync()
{//这个方法没有任何async调用return Task.CompletedTask(42);
}

上述例子通常并不需要是async因为它不执行async调用.然而,将它设置为async,这样可以帮助ABP框架运行拦截器时避免出现async套sync的调用.

此规则不强制你写的每一个方法都是async.这样并不好而且很乏味.只在拦截的服务上需要(特别是应用服务和仓库方法)

其他破坏性变更

查看发行说明中的破坏性变更.他们中的大多数都不会影响你的应用程序代码.

新功能

本次发布还包含一些新的功能和一堆改进:

  • #2597 新的Volo.Abp.AspNetCore.Serilog包.

  • #2526 C#客户端代理的客户端验证.

  • #2374 async后台作业.

  • #265 管理应用程序关闭.

  • #2472 IdentityServer模块实现DeviceFlowCodesTokenCleanupService.

功能,改进和BUG修复的完整列表, 请查看发布说明.

文档

随着v2.0的发布,我们也完成了一些缺少的文档.在接下来的几周内,我们将主要关注文档和教程.

ABP商业版

ABP商业版是建立在开源ABP框架之上的一套专业的模块,工具,主题和服务.

  • 除了ABP框架免费和开源模块之外, 提供专业模块.

  • 包含一个漂亮的UI主题, 具有5种不同的样式.

  • 提供ABP套件; 一个让开发更具有生产力的工具. 通过配置实体属性, 它可以在几秒内创建全栈的CRUD页面. 更多的功能陆续开发中.

  • 为企业提供高级支持.

除了这些标准的功能,我们会将提供定制服务.更多细节请参见commercial.abp.io网站.

ABP框架 vs ABP商业版

ABP商业版不是付费版本的ABP框架.可以把它当作为专业公司提供的附加套餐.你可以用它来节省时间和更快地开发产品.

ABP框架将永远是开源免费的!

一个原则是,我们创建的主要基础设施作为开源产品, 然后销售额外的预制应用程序功能,主题和工具.类似于ASP.NET Boilerplate和ASP.NET Zero产品.

购买商业版许可极大地节省你的时间和精力,你可以专注于自己的业务,此外也可获得专门的和优先的支持.同时,你也在支持ABP核心团队,因为我们花了大部分时间来开发,维护和支持开源的ABP框架.

有了ABP商业版,ABP现在变为一个平台.我们称之为ABP.IO平台, 其中包括开源ABP框架和ABP商业版.

演示

如果你想知道ABP商业版应用程序的启动模板是什么样,你可以很容易地创建一个演示,并看到它的实际效果.该演示包括所有的预制模块和主题.

下面是一张IdentityServer管理模块UI的截图:

这是一张来自使用material设计风格主题的演示应用程序的截图:

价格

你可以创建无限个工程/产品, 销售给无限个客户, 部署在无限台服务器上, 不受任何限制. 定价主要是基于开发人员个数,支持等级和源代码需求上.有三个标准包;

  • 团队许可: 包括所有的模块,主题和工具.允许最多3个开发者开发产品.可购买额外的开发者许可.

  • 商业许可: 允许下载所有的模块和主题的源代码.此外,默认包含了5个开发者许可.可购买额外的开发者许可.

  • 企业许可: 在商业许可上, 提供无限的专属支持.

请查看价格页面了解详细信息.除了标准包以外,我们也提供定制服务和定制许可.如有任何问题,请联系我们.

许可比较

许可价格是根据开发者数量,支持等级和源代码访问而变化的.

源代码

团队许可证不包括预制模块和主题的源代码.以NuGet和NPM包的方式使用所有这些模块.通过这种方式,你可以很容易地通过更新包的依赖得到新功能和bug修复.但是不能访问其源代码.所以不能嵌入模块的源代码到你的应用程序里,和随意修改源代码.

预制模块提供一定等级的定制和扩展,并允许你覆盖服务,UI部分等.我们正在努力使他们更加可定制和可扩展.如果你无需在预制模块中做很大修改的话,团队许可是你理想的选择,因为它更便宜,并且可轻松获得新的功能和bug修复.

商业和企业许可允许你在需要时下载任何模块和主题的源代码.它们使用与团队许可相同的启动模板,所以所有的模块都默认使用NuGetNPM包.但是,在需要的情况下,你可以从一个模块中删除包的依赖,并嵌入它的源代码到你自己的解决方案中,然后完全定制它.在这种情况下,当一个新版本可用时, 升级模块将不会那么容易.当然, 你不必升级!但是,如果你愿意,你也可以使用一些合并工具或Git的分支系统来做到这一点.

许可周期

ABP商业版许可是永久的,这意味着你可以永远使用它继续开发应用程序.

但是,下面的服务周期为一年:

  • 高级支持一年后结束.你可以继续得到社区支持.

  • 一年后将不会得到模块和主题的更新.你可以继续使用最后获得的版本.甚至可以在主版本内得到BUG修复和改进.

  • 你可使用ABP套件一年.

如果想继续获得这些好处,可延长许可期限.续订价格比正常价格低20%.

NDC London 2020

与去年一样, 我们是著名的软件开发会议NDC London的合作伙伴! 去年, 我们开展了ASP.NET Boilerplate和ASP.NET Zero主题:

今年,我们将着重于ABP.IO平台(开源ABP框架和ABP商业版).我们的展位会是这样的:

如果你参加会议,记得要参观我们的展位.我们将很高兴来谈一谈ABP平台的功能,目标和软件开发.

你想见ABP团队吗?

如果你在伦敦, 而且想和我们喝杯咖啡的话, 在2月1日的下午@hibrahimkalkan和@ismcagdas会在那.

想见面就给info@abp.io写个邮件 :)

使用优惠口令「dotnet123

????到手仅¥89,限前200

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

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

相关文章

C++map容器-大小和互换

map大小和互换 功能描述&#xff1a; 统计map容器大小以及交换map容器 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <map>//map容器 大小和交换 void test01() {map<int, int>m;m.insert(pair<in…

分享一些提高逻辑能力的心得

大家好&#xff0c;我是Z哥。最近有个很明显的感受。就是随着年龄的增长&#xff0c;我越来越发现曾经一些我认为理所应当的事情&#xff0c;在现在看来是如此的傻&#xff0c;如此的没有逻辑。有一句话是这么说的。花半秒钟就看透事物本质的人&#xff0c;和花一辈子都看不清事…

php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试

在网站 https://xdebug.org/download.php 找到对应PHP版本的XDEBUG下载&#xff0c;下载时选择source版本image获取下载地址## 下载打包的源码wget https://xdebug.org/files/xdebug-2.5.5.tgz解包tar zxvf xdebug-2.5.5.tgz进入解包后的源码目录cd xdebug-2.5.5执行 phpize 生…

CAP原理

定义在一个分布式系统&#xff08;指系统中的节点互相连接并共享数据&#xff09;中&#xff0c;当涉及读写操作时&#xff0c;只能保证一致性 (Consistency)、可用性 (Availability)、分区容错性 (Partition Tolerance)三者中的两个&#xff0c;另外一个必须被牺牲。一致性&am…

大学生开题报告php,php毕业设计开题报告

php毕业设计开题报告该频道涵盖有关于开题报告和毕业设计的论文范例,免费教你怎么写php毕业设计论文提供相关参考资料。一、研究背景1 基于英语新课程标准的要求。《英语课程标准》指出&#xff1a;必须正视学生外语学习基础和发展要求的差异&#xff0c;遵循外语学习的客观规律…

服务器应用服务为何卡顿?原来是内存耗尽惹的祸!

做过运维的朋友们都可能会遇到&#xff1a;服务器应用程序运行慢的问题&#xff0c;最终各部门找上门&#xff0c;。今天在这我跟大家分享一个案例及其解决办法。以前我跟很多朋友们也为这样的事情苦恼过&#xff0c;我的服务器内存可是64G啊&#xff0c;这都不够它吃的。后来我…

matlab 传感器的迟滞,MATLAB PI迟滞模型问题

之前我用matlab进行迟滞模型建模&#xff0c;误差非常大&#xff0c;我之前怀疑是自己的参数辨识出问题了&#xff0c;所以我用论文中的阈值向量和权重向量进行建模&#xff0c;输入数据也是用论文数据&#xff0c;但是出来的拟合的线误差非常大&#xff0c;和文献中相差太大。…

(2)MongoDB副本集自动故障转移原理(含客户端)

前文我们搭建MongoDB三成员副本集&#xff0c;了解集群基本特性&#xff0c;今天我们围绕下图聊一聊背后的细节。默认搭建的副本集均在主节点读写&#xff0c;辅助节点冗余部署&#xff0c;形成高可用和备份&#xff0c;具备自动故障转移能力。集群心跳保活集群每个节点以周期性…

matlab如何使用cu文件,Matlab编译cuda的.cu文件

matlab函数&#xff0c;大体首先是用nvcc命令生成.o文件&#xff0c;然后用mex链接对应库文件&#xff0c;生成动态链接库(.mexw64等)。测试环境&#xff1a;1) Windows x64 matlab cuda 5.5 vs20122) Ubuntu 12.04 amd64 server matlab gcc cuda 5.5windows用户需要根据…

C++map容器-查找和统计

map查找和统计 功能描述&#xff1a; 对map容器进行查找数据以及统计数据 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <map> //map容器 查找和统计void test01() {//查找map<int, int >m;m.insert(p…

C++map容器-插入和删除

map插入和删除 功能描述&#xff1a; map容器进行插入数据和删除数据 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <map>//map容器 插入和删除 void printMap(map<int, int> &m) {for (map<in…

你需要了解的 JIT Debugging

如果你还不清楚什么是转储文件&#xff0c;不知道什么时候需要转储文件&#xff0c;请参考转储文件系列文章的第一篇 —— 转储文件知多少。前言 我在 你需要知道的 N 种抓取 dump 的工具 的工具 这篇文章里&#xff0c;向大家介绍了几款可以抓取转储文件的工具及其简单用法。不…

超越“迁移”的思考:应用程序该如何被Kubernetes接管?

传统虚拟机&#xff08;VM&#xff09;的可扩展性差强人意&#xff0c;但Kubernetes可以快速&#xff0c;无缝地扩展正在运行的服务。Kubernetes将容器、集群以及广泛的抽象配置方法引入桌面&#xff0c;用于提升部署和变更管理体验&#xff0c;从而使人们对Kubernetes关注更多…

C++string容器-字符串拼接

string字符串拼接 功能描述&#xff1a; 实现在字符串末尾拼接字符串 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//string字符串拼接 void test01() {string str1 "我";str1 "爱…

如何运用领域驱动设计 - 存储库

概述在上一篇文章<如何运用领域驱动设计 - 聚合>中&#xff0c;我们已经了解过领域驱动设计中一个很核心的对象-聚合。在现实场景中&#xff0c;我们往往需要将聚合持久化到某个地方&#xff0c;或者是从某个地方创建出聚合。此时就会使得领域对象与我们的基础架构产生紧…

C++string容器-字符串查找和替换

string查找和替换 功能描述&#xff1a; 查找&#xff1a;查找指定字符串是否存在 替换&#xff1a;在指定的位置替换字符串 函数原型&#xff1a; rfind 和find 的区别&#xff1a; rfind从右往左查找 find从左往右查找 查找案列代码如下&#xff1a; #include <iostrea…

如何运用领域驱动设计 - 工作单元

概述在上一篇 《如何运用领域驱动设计 - 存储库》 的文章中&#xff0c;我们讲述了有关仓储的概念和使用规范。仓储为聚合提供了持久化到本地的功能&#xff0c;但是在持久化的过程中&#xff0c;有时一个聚合根中的各个领域对象会分散到不同的数据库表里面&#xff1b;又或者是…

C++string容器-字符串比较

string字符串比较 功能描述: 字符串之间的比较 比较方式&#xff1a; 通常用来比较两个字符串是否相等 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring> //string字符串比较void test01() {string…

国产自主研发编程语言火了,同行十二年,不知Python是木兰?

1月17号有媒体称&#xff0c;一款面向智能物联网和编程教育的号称自主研发语言横空出世&#xff0c;名为【Mulan 】。消息一出&#xff0c;引起了众多争议。但有知乎网友发现&#xff0c;下载的程序包解包后——是个 Python&#xff1f;何为木兰&#xff1f;1月17号&#xff0c…

C++string容器-字符存取

string中单个字符存取方式有两种 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//string 字符存取 void test01() {string str "hello";cout << "str " << str << endl;for (int i…