KES Plus深度体验:当数据库开始“越界“做开发平台


兼容
是对前人努力的尊重
是确保业务平稳过渡的基石
然而
这仅仅是故事的起点

先来看看架构图

在这里插入图片描述

架构图信息量挺大的,我拆开来讲。

左侧是三大功能块:快速开发IDE、运维管理、第三方系统集成。右侧是核心技术架构层,从上到下三层——

前端开发层:支持B/S应用、移动端、小程序、C/S应用。底层走RESTful API,JSON做数据载体,http/https协议。

后端业务逻辑开发层:这是核心。业务服务API全部用PL/SQL写,发布成"PL/SQL API-1/2/3",前端通过RESTful接口调用。同时还有视图、函数、存储过程这些数据库对象。最底下一条黄带子很关键——“基于数据库底层的权限控制体系:细粒度权限控制(支持行、列权限)”。

底层支撑层:安全防护+数据存储,KES、KES RAC、共享存储。

整个架构的核心理念就一句话:数据库就是你的后端。没有Spring Boot,没有Express,PL/SQL写完直接发布成接口,前端调就完了。

PL/SQL里还有些挺实用的特性,比如%TYPE和%ROWTYPE:

DECLARE
    v_name "t_vehicle_info".vehicle_brand%TYPE;  -- 自动跟列同类型
    v_row "t_vehicle_info"%ROWTYPE;              -- 匹配整行结构
BEGIN
    SELECT * INTO v_row FROM "basicInfo"."t_vehicle_info" WHERE id = 'xxx';
    v_name := v_row.vehicle_brand;
END;

这俩玩意儿在表结构变更的时候特别有用——改了列类型不用手动改变量声明,跟着自动变。

关联数组、可变数组、嵌套表、结构体这些PL/SQL的数据结构也都能用。比如关联数组,类似别的语言里的Map:

DECLARE
    TYPE map IS TABLE OF varchar INDEX BY varchar;
    dataMap map;
    i varchar;
BEGIN
    dataMap('first') := 'first data';
    dataMap('second') := 'second data';
    i := dataMap.FIRST;
    WHILE i IS NOT NULL LOOP
        RAISE NOTICE '%', dataMap(i);
        i := dataMap.NEXT(i);
    END LOOP;
END;

总体来说PL/SQL开发这块的体验是OK的,IDE加持之后写起来没那么痛苦了。但有一个问题我必须说——调试能力还是偏弱。虽然可以在IDE里看RAISE NOTICE的输出,但跟Java那种断点调试比还是有差距。复杂的业务逻辑出了bug,排查效率会低一些。

发布RESTful接口:核心流程

PL/SQL写完了,下一步就是发布成RESTful接口,这一步在KES Plus里真的很简单。

右键函数→属性→RESTful→填配置:分类目录、RESTful名称、URL路径、请求类型(GET/POST/PUT/DELETE)、返回类型(JSON/单行/集合)、匿名或权限点。

保存之后,这个接口就可以被前端调用了。完整的URL格式是:应用编码/模块编码/RESTful路径

前端调用也很简单,KES Plus基于axios封装了request:

import { request } from '@kesplus/kesplus';

// 查询车辆列表
request.get('/basicInfo/vehicle/list', {
    params: { vehicleBrand: '沃尔沃' }
}).then(res => {
    // 处理返回数据
});

这里有个设计挺巧妙的——RESTful接口天然跟权限体系绑定。每个接口可以设置是否匿名,非匿名的接口必须关联权限点,只有被授权的角色才能访问。这个是做在数据库底层的,不是应用层过滤,所以不存在绕过API直接查数据的"后门"问题。

异常处理

KES Plus的异常处理分三层:全局异常、系统异常、自定义异常。

全局异常是平台统一处理的,会提取异常的编号、描述和堆栈信息,转成标准格式返回前端。系统异常是平台预定义的,比如登录失败、权限不足这些。自定义异常你自己往结果明细表里插一条就行:

-- 定义自定义异常
INSERT INTO "kesplus_app"."kesplus_sys_i18n"(
    "id", "code", "lang", "success", "msg", "create_by"
) VALUES (
    lower(sys_guid()), 'vehicle_not_found', 'zh-CN', '0',
    '车辆信息不存在', '0'
);

-- 在业务代码里抛出
CALL "kesplus_platform".exception('vehicle_not_found');

前端收到的就是标准的JSON错误响应,有code、message、堆栈信息,排查起来还算方便。

内置模块:省事是真省事

KES Plus创建完应用之后,默认自带两个模块:系统管理和流程管理。

系统管理

系统管理包含组织管理、岗位管理、用户管理、角色管理、数据字典。说白了就是企业应用里必有的那套RBAC体系。

组织是两级结构:公司和部门。岗位定义职责。用户关联组织和岗位。角色关联权限。数据字典管固定数据。

这些全是开箱即用的,不用你从头写。建完应用第一件事就是用默认的管理员账号登录,配好组织→岗位→用户→角色,然后就能用了。

权限这块KES Plus做得比较深。它支持行级和列级的细粒度权限控制,而且是在数据库底层做的。什么意思呢?就是说不是在应用层加WHERE条件过滤数据,而是数据库根据用户的权限直接返回该用户能看到的数据。这样就没有"后门"——你就算绕过前端直接调API,也只能看到你有权限的数据。

这块对安全要求高的行业(金融、政务)来说确实是个杀手级特性。

流程管理

流程管理基于BPMN2.0规范,提供了可视化的流程设计器。流程建模的步骤:新建流程→设计流程→发布流程→配置表单。

流程运行时支持:我发起的、待办任务、已办流程。操作包括审批、驳回、撤回、撤销。

版本管理有个规则:同一流程只能有一个活动版本,编辑新版本基于活动版本操作,保存后生成新版本。每个版本必须重新配置表单。未发布的可以删除,已发布的不可以删除。

这套流程引擎对于OA类应用来说够用了,审批流、报销流这些常规场景都能覆盖。但如果你要做那种特别复杂的动态流程(比如条件分支里套条件分支再套并行网关),可能会觉得灵活性不太够。

运维侧:故障切机和限流

KES Plus的运维能力其实比我想象的要强。

平台内置了高可用部署机制,支持基于权重和负载因子的负载均衡策略。故障自动切机——主节点挂了自动切换到备节点。繁忙限流——请求量太大的时候自动限流,还支持VIP通道(关键业务不被限流影响)。

多环境一键部署也是有的,开发/测试/生产环境可以统一管理。

自动巡检能力包括数据库健康检查、故障诊断分析、性能优化建议。这些对DBA来说确实能省不少事,不用每天盯着监控面板手动排查了。

放到更大的视角来看

说到这里我想退一步,聊聊"数据库驱动开发"这个范式本身。

这其实不是什么新概念。Oracle APEX早在2000年代初就有了,但很长一段时间里它都不是主流——因为那个时候的架构思潮是"数据库越薄越好",业务逻辑往外抽,写Java写.NET。微服务兴起之后更是如此,数据库被降格为"持久层",只管存数据,别的不许碰。

但最近几年风向有点变了。原因有几个:

一是信创。很多甲方从Oracle迁移过来,原本就有大量的存储过程和PL/SQL代码。你让他们重写成Java?成本太高了。KES Plus这种"PL/SQL即API"的模式正好能承接这些遗产。

二是架构回归。微服务的那套东西,在中小规模场景下经常是过度设计。一个单体应用能搞定的事情,非要拆成十个微服务,然后花大量时间处理分布式事务、服务发现、链路追踪这些基础设施问题。KES Plus这种极简架构,"一个请求+一个响应"就完了,对于内部管理系统来说其实够用。

三是安全合规。在数据库底层做权限控制,比在应用层做安全得多。应用层总有漏洞可能被绕过,但数据库层的行级列级权限,你绕不过去。这对于等保2.0、数据安全法这些合规要求来说是个实质性的优势。

当然也不能只说好的。KES Plus目前面临的挑战也挺明显的:

生态还比较薄弱。Oracle APEX背后有Oracle几十年的生态积累,组件市场、模板市场、第三方插件都很丰富。KES Plus目前还处在起步阶段,开箱即用的组件和模板数量不够多,很多场景还是得自己从零开始写。

PL/SQL的人才问题。现在的开发者主流会的是Java/Python/JavaScript,让他们转去写PL/SQL,学习成本不低。虽然有IDE辅助,但思维方式还是不一样的。这个不是KES Plus自己的问题,是整个"数据库驱动开发"范式的问题。

复杂前端场景的支持。KES Plus的前端基于Vue3+ElementPlus,做后台管理系统绰绰有余,但如果你的应用需要复杂的数据可视化、实时协同编辑、3D渲染这些,平台提供的组件可能不够用,得自己扩展。

踩坑实录:那些文档里没写的东西

用了两周不可能一帆风顺,有些坑我觉得得说说,免得你们走弯路。

坑一:pnpm install的依赖问题

导入demo应用之后直接启动报错,Terminal显示"kesplus不是内部或外部命令"。

我的整体判断

用了两周下来,我对KES Plus的评价是:在特定场景下非常有竞争力,但不是万能的

适合的场景:

  • 企业内部管理系统(OA、ERP、CRM类)
  • Oracle迁移场景,有大量PL/SQL遗产的项目
  • 安全合规要求高的政务/金融应用
  • 开发团队规模不大、需要快速交付的项目

不太适合的场景:

  • 面向C端的高并发互联网应用
  • 需要复杂前端交互的产品
  • 团队完全没有PL/SQL经验的全新项目

最后说一点比较个人的感受吧。我觉得KES Plus最让我欣赏的地方不是某个具体功能,而是它的设计理念——让数据库重新回到架构的中心位置。这些年数据库被边缘化太久了,大家都把它当存储用,业务逻辑全搬出去了。但其实数据库才是离数据最近的地方,在数据库里做计算,不存在网络传输的开销,不存在ORM转换的损耗,事务一致性也天然有保障。KES Plus把这个理念落到了产品里,我觉得方向是对的。

当然了,方向对不代表执行就完美。组件生态、调试体验、文档深度这些都需要持续打磨。但至少起步是扎实的,不是那种PPT产品。对于一个对标Oracle APEX的国产产品来说,能做到这个程度已经不容易了,后续能不能做好关键看生态建设。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序边界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值