在最近几个月的工作中,接触到了某ERP厂商提供的低代码平台。
其实在我还没毕业时,在北京某小公司实习的时候,就接触过类似的ERP低代码平台。不过那时因为自己的技术和知识有限。对低代码平台的理解仅仅停留在:拖拖拽拽控件,加点脚本式代码完成业务功能的层面。
时隔八年,再次接触低代码平台,让我对这一领域有了一些新的思考。这里稍作总结。
这是看了该平台的介绍资料后,认为其中说的比较有道理的一点:
随着互联网行业的实践和宣传,各行业都开始认识到“小步快跑,快鱼吃慢鱼”的重要性,以及灵活性对企业生存的决定性作用
为了实现这种灵活性,信息化系统必须能够迅速适应变化,而低代码平台正是传统行业的理想选择。传统行业的业务形式相对单一,功能需求有限,因此低代码平台足以满足大部分需求。
解释:
下面所说的都只是针对一些传统商业软件。
低代码平台第一个让我比较意外的是:表单页面和数据库表居然可以有如此强的关联。
这在传统开发中并不常见,尤其是互联网公司的产品。
而在低代码平台里,表单表单和数据表 几乎就是等价的。
作为一个庞大的低代码平台,做出这样一个看似简单的设计。我认为除了行业特殊性,还是有强有力的设计理念在其中的:DDD(领域设计)。
尤其当我使用其中的各种功能,发现有很多层层嵌套的通用组件。可以想象,要hold住这么庞杂的业务,平台业务架构在处理复杂业务时,需要深厚的行业经验和清晰的抽象思维能力,将业务逻辑层层剥离,明确各层关系,以避免未来的发展瓶颈。
当然,因为自己也只接触了两三个月,对于这一块实在无法挖掘更深层的东西,只是管中窥豹,隐约感觉这是这个平台最复杂,最具商业价值的一块内容(渲染引擎虽然核心,但也仅仅是技术层面的复杂,并没有什么行业壁垒)
过去,我们坚持数据库设计的范式,力求每张表的字段数量控制在合理范围内,以减少查询时的表关联。
但在低代码平台中,由于业务需求,某些表可能包含数百个字段,复杂的页面可能涉及七八张表的嵌套。这让我对平台的性能产生了疑问。然而,经过一段时间的使用,我发现关联表多、字段多并非关键问题,真正影响性能的主要还是表中的数据量。
实际生产中的表字段设计有很多通用字段,
比如:create_time, create_user, modify_time, modify_user, is_delete。 这些字段很好理解,几乎可以闭眼加上(或者公司会强制要求加上),我称之为:一级必选字段
二级必选字段:status(状态) 这个字段在我之前看来就涉及到具体业务了,不同的业务对status的解释有所不同,可能是工作流的状态,订单的状态…
以上就是以前的我对表设计的浅显理解。而这这段工作经历让我意识到:还可以根据业务需要设计更周全的表字段:记录每次修改的记录。
有点类似于MVCC机制:每次修改并不是在原有的基础上直接改数据,而是新增一条。原来的数据保留,但要标注状态。为了实现这一需求。表中增加了新的“一级必须字段":
业务id
、是否当前最新版本
、生效开始时间
、生效结束时间
等字段。
其中业务id
的意思是:每次修改并新增数据,该字段都不变,因为每次修改都新增一条数据,但对用户来说,并没有增加业务数据。数据id是不变的。
当然,并不是每个表单页面都需要这种设计,如果表字段不断频繁变更,那么就不适合这种设计了。但只要是不怎么变动的数据,尤其是很核心的数据。有了这样的设计,历史痕(hen)迹一览无余。可以更快的定位问题或支持更复杂的业务场景。
在这样字段的基础上,再增加业务逻辑状态字段:start_date, end_date,business_status
如果再往上层设计,到用户交互的页面层,我们可能会遇到查询状态的区分问题。产品设计人员可能不会完全按照数据库设计或实际流程状态的区分来查询,而是根据普通人的理解。例如,实际工作流状态可能有五个,但产品设计时可能认为只有三个,将其中两个状态合并。这时,我们需要在设计中增加一层状态,以适应用户交互状态的理解方式。
下图展示了业务表设计的一般三层逻辑:
解释:
这再次印证了那句话:
在计算机领域,大多数问题都可以通过增加一个中间层来解决。