docker版jxTMS使用指南:类表联合的继承
创始人
2025-06-01 08:22:52
0

本文讲解docker版jxTMS是如何解决随业务变化而需要增加数据表字段的,整个系列的文章请查看:docker版jxTMS使用指南

开发中经常会遇到随着需求的变化,需要在现有的数据表中增加字段。说起来这其实非常简单,但jxTMS的诉求是低成本快速定制,所以笔者有几个考虑:

  • 直接动数据库是非常危险的行为,尤其如果是SaaS版本的jxTMS,如果允许开发者可以动数据库,这将带来巨大的安全隐患;如果制订一个审核流程由供应商来做,那所谓的快速、低成本都会成为笑谈

  • 由开发者来直接操作,就大大提高了开发者的门槛和学习成本,不符合jxTMS的核心诉求:低成本快速定制

  • 增加新的字段后,理论上老版本的处理逻辑其实已经发生了变化【如新增字段和原有字段间的逻辑依赖、约束等关系,不处理则可能违反了业务规则,处理就必须修改老版本的处理逻辑,而且老数据还不符合这些依赖或约束】,如果不经过完整的测试,原本工作良好的老代码就可能出现各种莫名其妙的bug,这更是笔者深恶痛绝的

所以,jxTMS提供了更好的解决办法:类表联合的继承。简单的说,就是利用面向对象的继承能力,直接在老的数据类上继承出一个子类,放入要增加的字段。jxTMS则会自动完成父子两个类所对应的数据表的关联,而这一关联,对开发者透明。

我们现在演示一下什么是类表联合的继承

首先,打开data文件,在其中添加:

class extDemo super demoData:field ID long primaryKeyfield State string len=32
;

意思是新定义一个虚拟数据类:extDemo,其继承自demoData。并额外定义了两个属性:ID、State。由于demoData中也包含了ID属性,所以extDemo就实质上和demoData在ID属性上实现了联合,而extDemo和demoData的连接由jxTMS自动完成。

保存data文件

然后,打开capa.py文件,修改sayHello函数:

@myModule.event('cmd', 'sayHello')
def sayHello(self, db, ctx):#创建一个刚定义的extDemo类型的数据对象jo = pyORM.create(db,'extDemo')jo.Type = "ext"#中文字符串需decodejo.Name = "测试类表联合的继承".decode('utf-8')#extDemo类型的数据对象具有State属性jo.State = "第一次测试".decode('utf-8')db.update(jo, 'Type', 'Name', 'State');

然后保存并上传capa.py,并热机刷新

这时,可以在root控制台看到extDemo的创建【去除时间等信息后】:

数据表(extDemo)是否存在:false 
创建数据表:extDemo 
CREATE TABLE extDemo(ID bigint NOT NULL PRIMARY KEY,State VARCHAR(32) NOT NULL)

然后点击快捷栏【演示->helloWorld】,然后点击【点我】按钮。

然后我们连接到mysql中:

#在root控制台中执行
mysql -u root -p
#输入密码:123456#然后执行:	
mysql> select * from extDemo;
+------------------+--------------------------------+
| ID               | State                          |
+------------------+--------------------------------+
| 1719419712569760 | 第一次测试                       |
+------------------+--------------------------------+mysql> select ID,Type,Name from demoData;
+------------------+-----------+----------------------------+
| ID               | Type      | Name                       |
+------------------+-----------+----------------------------+
| 1719331491676285 | demo      | sayHello                   |
| 1719339552080050 | 类型甲     | xx我的12x3,78              |
| 1719419712569760 | ext       | 测试类表联合的继承            |
+------------------+-----------+----------------------------+

大家会看到,extDemo虚拟数据类中的属性,分别分散到了demoData数据表和extDemo数据表中。而两者的ID是相同的【你看到自然不是1719419712569760】,这就表明这些数据是属于同一个数据对象。为了验证这一点,我们读取一下看看:

我们修改一下capa.py文件中的sayHello函数:

@myModule.event('cmd', 'sayHello')
def sayHello(self, db, ctx):#请注意,这里的读取的虚拟数据类类名是:extDemo#用你在上面的查询中所看到的ID值来取代1719419712569760jo = orm.getByID(db.getDBConn(),'extDemo',1719419712569760)jx.log('type:{}',jo.Type)jx.log('name:{}',jo.Name)jx.log('state:{}',jo.State)

然后保存并上传capa.py,并热机刷新

然后点击快捷栏【演示->helloWorld】,然后点击【点我】按钮。这时我们在实时日志中会看到:

type:ext
name:测试类表联合的继承
state:第一次测试

这证明,我们在python中看到的extDemo虚拟数据类,确实是由demoData数据表和extDemo数据表所组成,jxTMS也确实在读取时,自动帮我们将两表联合了起来。

增改查各种功能,对类表联合的继承都是透明的,即继承出来的子虚拟数据类和没有经过继承的虚拟数据类完全相同,jxTMS会自动感知并在需要时自动介入完成相关的联合。

注:出于安全的考虑,jxTMS中一般的虚拟数据类都是不可删除的。所以一般都会定义一个NoUsed字段,然后通过将其设为true,然后在查询时增加对NoUsed的检测来替代删除功能

由于我们没有对demoData做任何修改,所以针对demoData的老代码自然也就不需要做任何的修改而能正常运行无误。所以我们只需要针对extDemo来开发新功能就好了,完全不会影响老功能的正常使用,等新功能完整OK了,测试也没问题了,只要取消老功能的入口而代之以新功能的入口即可。

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

相关内容

热门资讯

安卓系统双清详图解,恢复出厂设... 你有没有遇到过手机卡顿、运行缓慢的问题?别急,今天就来给你详细解析一下安卓系统的“双清”操作,让你的...
召唤抽奖系统安卓直装,轻松体验... 你知道吗?现在市面上有一种特别火的玩意儿,那就是召唤抽奖系统安卓直装。是不是听起来就让人心动不已?没...
系统工具箱安卓2.3,深度解析... 你有没有发现,手机里的那些小工具,有时候就像是个神奇的百宝箱呢?今天,就让我带你一探究竟,看看安卓2...
华硕平板安卓刷机系统,解锁性能... 亲爱的数码爱好者们,你是否曾为你的华硕平板安卓系统感到厌倦,想要给它来一次焕然一新的体验呢?那就跟着...
鸿蒙系统与安卓怎么区别,差异解... 你有没有发现,最近手机圈子里有个大热门,那就是鸿蒙系统和安卓系统的区别。这两位“系统大侠”各有各的绝...
红帽系统怎么刷回安卓,红帽系统... 你是不是也和我一样,对红帽系统刷回安卓充满了好奇?别急,今天就来给你详细揭秘这个过程,让你轻松上手,...
ios安卓联想三系统,全面解析... 你有没有发现,现在的手机市场真是热闹非凡呢!各种操作系统轮番登场,让人眼花缭乱。今天,就让我带你来聊...
安卓调用系统相机并存盘,And... 你有没有想过,手机里的照片和视频,是怎么被我们随手拍下,又神奇地存到手机里的呢?今天,就让我带你一探...
安卓4.0原生系统下,引领智能... 你有没有发现,安卓4.0原生系统下,手机的使用体验简直就像打开了新世界的大门?今天,就让我带你一起探...
安卓c13系统,创新功能与性能... 你知道吗?最近安卓系统又来了一次大更新,那就是安卓C13系统。这可不是一个小打小闹的更新,而是带来了...
鸿蒙3.0脱离安卓系统,开启全... 你知道吗?最近科技圈可是炸开了锅,因为华为的新操作系统鸿蒙3.0横空出世,竟然宣布要脱离安卓系统,这...
安卓怎么应对苹果系统,安卓系统... 你知道吗?在智能手机的世界里,安卓和苹果就像是一对相爱相杀的恋人。安卓系统,这位多才多艺的“大众情人...
安卓系统如何开橱窗教程,安卓系... 你有没有想过,你的安卓手机里也能开个橱窗,展示那些你心爱的宝贝?没错,就是那种可以随时翻看、随时分享...
安卓系统软件APK,深入探究安... 你有没有发现,手机里的那些好玩的应用,其实都是靠一个小小的文件来“住”进去的?没错,就是安卓系统里的...
css安卓系统line-hei... 你有没有发现,在使用安卓手机的时候,有时候文字看起来会有些挤,不够舒展呢?这可真是让人头疼的小问题。...
如何换桌面安卓系统,轻松切换个... 你是不是也和我一样,对安卓系统的桌面换换口味,想要来点新鲜感呢?那就跟我一起探索如何轻松给安卓桌面来...
安卓移动到系统目录lib,An... 你有没有想过,你的安卓手机里那些神秘的系统目录里藏着什么秘密?今天,就让我带你一探究竟,揭开安卓移动...
安卓系统神器软件下载,畅享智能... 你有没有发现,手机里装满了各种应用,但总有一些神器级的软件,让你的生活和工作变得轻松愉快呢?今天,就...
安卓系统怎么创小号教程,安卓系... 你是不是也和我一样,对安卓系统的小号功能充满了好奇?想要在同一个设备上玩转多个账号,但又不知道怎么操...
华为安卓9.0系统图库,探索创... 你知道吗?最近华为出了一款搭载安卓9.0系统的手机,那叫一个火啊!这款手机不仅外观时尚,性能强大,而...