大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。
abp框架在.net社区是spring一样的存在,用的人也非常多,毫无疑问,它确实是一个不错的框架,不然社区的star也不会那么多。我也是因为它的模块化,ddd,微服务兼容等特点做的选型。但是随着你使用的项目越多,你会发现它也有自己的不足,所谓没有十全十美的框架。
一、abp的痛点
通过使用商业版和社区版的经验,有几个痛点:
1.前端不支持VUE:
angular前端不好招聘,小公司可能个别会ng,但是架不住离职的风险。我曾经见过一个开发团队,后端用abp,前端用ng,前后端不分离,这个时候后端人员就硬着头皮去修改前人的angular,问他为什么改得这么慢,对方说:我比较熟悉vue,老板只有暗暗着急,却无可奈何。显然技术选型出问题,对团队和交付的影响是非常大的;
2.社区版界面比较丑陋:
是不是我的理解有偏差,感觉老外大部分都不怎么重视脸面问题。商业版的界面稍微就好看一些,但是味道感觉还是差了那么一点点;
3.售后服务非常慢:
这个可能是最坑的地方,对新人比较不友好,如果项目紧急,随时可能要面对的是漫长的等待,记得我刚入坑到时候,碰到一个https配置问题,问了邮件许久都没有回复;
4.功能不好用:
社区版的功能要么水土不服,要么功能太浅。看起来好些功能挺多的,但是用起来,还是要改得满头大汗;
5.价格比较昂贵:
带源码商业版要4万3左右,企业版更贵,大概要7.3万。
二、我们如何处理?
我不是说abp商业版不好,它挺不错的,只是不适合自己的业务需求,于是,我们用VUE3+ABP重做了一下(传送门),请大家指教,目前有几个增强点:
1.功能更深入。
比如:
【增强】文件管理:支持多种SSO存储渠道配置和切换;支持图片、文档、视频、音频的存储;
【新增】任务调度:支持单体和集群,支持可视化配置和日志记录;
【重写】认证授权:支持用户池,用户同步,单点登录,目前正在开发中;
【增强】用户和角色扩展;
【复刻】关联账户;
【复刻】委托登录;
【新增】菜单管理;
【新增】行政单位;
【新增】计量单位;
【新增】校验规则;
至于多语言,审计日志, opendidct,多租户等自带的功能,我们用vue3把他们优化和重写了,功能基本没有变化,没有什么可以分享的。
下面是认证授权的同步中心,用来解决多个系统用户集中管理和单点登录问题。
2.细节更深入。
功能层面
比如:菜单支持标星收藏和归类;前后端分离我们基于permission表扩展了菜单表,这样既能支持系统默认菜单,也能支持自定义菜单。
返回格式
又比如,abp的接口返回格式比较没有规则,考虑前端的体验,我们给它包了一个壳,做了格式统一:
abp的返回格式:
我们的返回格式:
考虑前端的体验,我们给它包了一个壳
{
"code": null,
"data": {},
"isSuccess": true,
"msg": null,
"extras": null,
"timestamp": 1739241669
}
抛出异常状态码
这里面的状态码也很有讲究,我们观察发现abp也不是很规范,后台抛异常各自情况都有,我们统计了一下,abp的异常种类很多,多到感觉抓不到规律:
Application层:
throw new AbpException($"No policy defined to get/set permissions for the provider '{providerName}'. Use {nameof(PermissionManagementOptions)} to map the policy.");
throw new ApplicationException($"The permission named '{permission.Name}' has not compatible with the provider named '{providerName}'");
throw new AbpValidationException();
throw new FileNotFoundException($"Signing Certificate couldn't found: {file}");
t