朱建伟 2020-01-16
ABP框架2.0版已经在本周公布.这篇文章解释了为什么我们发布了一个抢先主版本,和2.0版本中的变化.
除了v2.0版本,我们很高兴地宣布ABP商业版,这是建立在开源ABP框架的之上的一套专业的模块,工具,主题和服务.
本来在V1.1.2发布后计划发布1.2版.然而,有报告称1.x版在Linux上有一些性能和稳定性问题,尤其是当应用程序部署在低配CPU和内存的Linux容器上.
我们深入研究了这一问题,并已查明问题的根本原因与拦截async
方法的实现有关.此外,也有一些 async
套sync
的用法影响了线程池的优化.
最后,在社区在大力协助下我们解决了所有的问题.但是,我们也有一些重要的设计决策导致了一些破坏性变更,因为语义版本,我们不得不改变框架的主版号.
大多数的应用程序不会受到破坏性变更的影响,或者只需要做一些微小的修改.
一些拦截器需要使用async
的API.当他们拦截sync
方法时,他们需要调用async
套sync
.这最终导致了async
套sync
的问题.这就是为什么我们删除了一些同步的API.
当你需要在async
方法中调用sync
方法时, async
套sync
这种模式是C#
一个经典问题.虽然有一些解决方法,但是都有相应的缺点,并建议不要写这样的代码.你可以在网上找到关于这一话题的许多文档.
为了避免这个问题,我们已经移除:
如果你遇到了编译错误,只需使用这些API的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
.这样并不好而且很乏味.只在拦截的服务上需要(特别是应用服务和仓库方法)
查看发行说明中的破坏性变更.他们中的大多数都不会影响你的应用程序代码.
本次发布还包含一些新的功能和一堆改进:
Volo.Abp.AspNetCore.Serilog
包.C#
客户端代理的客户端验证.async
后台作业.IdentityServer
模块实现DeviceFlowCodes
和TokenCleanupService
.功能,改进和BUG修复的完整列表, 请查看发布说明.
随着v2.0的发布,我们也完成了一些缺少的文档.在接下来的几周内,我们将主要关注文档和教程.
ABP商业版是建立在开源ABP框架之上的一套专业的模块,工具,主题和服务.
除了这些标准的功能,我们会将提供定制服务.更多细节请参见commercial.abp.io网站.
ABP商业版不是付费版本的ABP框架.可以把它当作为专业公司提供的附加套餐.你可以用它来节省时间和更快地开发产品.
ABP框架将永远是开源免费的!
一个原则是,我们创建的主要基础设施作为开源产品, 然后销售额外的预制应用程序功能,主题和工具.类似于ASP.NET Boilerplate和ASP.NET Zero产品.
购买商业版许可极大地节省你的时间和精力,你可以专注于自己的业务,此外也可获得专门的和优先的支持.同时,你也在支持ABP核心团队,因为我们花了大部分时间来开发,维护和支持开源的ABP框架.
有了ABP商业版,ABP现在变为一个平台.我们称之为ABP.IO平台, 其中包括开源ABP框架和ABP商业版.
如果你想知道ABP商业版应用程序的启动模板是什么样,你可以很容易地创建一个演示,并看到它的实际效果.该演示包括所有的预制模块和主题.
下面是一张IdentityServer管理模块UI的截图:
这是一张来自使用material设计风格主题的演示应用程序的截图:
你可以创建无限个工程/产品, 销售给无限个客户, 部署在无限台服务器上, 不受任何限制. 定价主要是基于开发人员个数,支持等级和源代码需求上.有三个标准包;
请查看价格页面了解详细信息.除了标准包以外,我们也提供定制服务和定制许可.如有任何问题,请联系我们.
许可价格是根据开发者数量,支持等级和源代码访问而变化的.
团队许可证不包括预制模块和主题的源代码.以NuGet和NPM包的方式使用所有这些模块.通过这种方式,你可以很容易地通过更新包的依赖得到新功能和bug修复仅.但是不能访问其源代码.所以不能嵌入模块的源代码到你的应用程序里,和随意修改源代码.
预制模块提供一定等级的定制和扩展,并允许你覆盖服务,UI部分等.我们正在努力使他们更加可定制和可扩展.如果你无需在预制模块中做很大修改的话,团队许可是你理想的选择,因为它更便宜,并且可轻松获得新的功能和bug修复.
商业和企业许可允许你在需要时下载任何模块和主题的源代码.它们使用与团队许可相同的启动模板,所以所有的模块都默认使用NuGet
和NPM
包.但是,在需要的情况下,你可以从一个模块中删除包的依赖,并嵌入它的源代码到你自己的解决方案中,然后完全定制它.在这种情况下,当一个新版本可用时, 升级模块将不会那么容易.当然, 你不必升级!但是,如果你愿意,你也可以使用一些合并工具或Git的分支系统来做到这一点.
ABP商业版许可是永久的,这意味着你可以永远使用它继续开发应用程序.
但是,下面的服务周期为一年:
如果想继续获得这些好处,可延长许可期限.续订价格比正常价格低20%.
与去年一样, 我们是著名的软件开发会议NDC London的合作伙伴! 去年, 我们开展了ASP.NET Boilerplate和ASP.NET Zero主题:
今年,我们将着重于ABP.IO平台(开源ABP框架和ABP商业版).我们的展位会是这样的:
如果你参加会议,记得要参观我们的展位.我们将很高兴来谈一谈ABP平台的功能,目标和软件开发.
如果你在伦敦, 而且想和我们喝杯咖啡的话, 在2月1日的下午@hibrahimkalkan和@ismcagdas会在那.
想见面就给写个邮件 :)