当前位置: 首页 > news >正文

元数据驱动开发 - 面向对象编程思想的补充

面向对象思想的优点和不足

当前绝大多数管理信息系统都采用面向对象思想开发实现,其优点是贴合管理业务逻辑,比如将部门、员工、订单、商品、客户都抽象成对象,该对象的属性和行为对应真实业务场景,逻辑清晰,易于理解,开发效率高。另外利用封装、继承、多态快速搭建通用模块(权限、审批、日志、报表),便于复用与扩展,更加提升了开发效率。

但随着信息化推进逐渐深化,管理信息系统规模越来越庞大,需求变更越来越频繁,传统的面向对象开发也越来越力不从心。具体表现为开发周期漫长、需求响应迟缓、个性化开发费用高。导致这些问题的原因就是过度滥用面向对象思想,面向对象的封装在隔离变化的同时也限制了变化,使得后续调整的代价大大增加。面向对象的继承和多态的方法论过于高端,在面对大多数业务需求时,开发人员最常见的做法是加个条件语句,而不是采用继承和多态的方式实现;但如果开发人员采用继承和多态去实现需求,就引入了巨大的后期维护成本,继承层级越深,维护代价呈指数级上涨。

对象封装与需求变化的平衡

这是国内外的研究共识,管理类业务系统不适合深度继承,其实无论什么类型的软件,过多的继承层次都是难以掌握的。管理软件行业目前的主流改良做法是严格控制继承,只做单层或二层极简继承,并且采用组合聚合的方式来扩展功能。易元平台认为主流改良做法没有解决根本问题,仅仅缓解了继承和多态导致的问题,但根源问题是封装导致,因为封装从一开始就限制了变化,而管理信息系统当前最迫切的需求就是柔性管理和拥抱变化。

笔者在这里先提出一个结论:当前管理信息系统面临的矛盾之一就是:面向对象封装的限制与不断增长变化的需求之间的矛盾。接下来继续说明如何解决这个矛盾。

元数据驱动开发

管理信息系统有大量的易变数据信息不适合用对象封装,而市场经济的不断深化、信息化的不断发展也要求管理信息系统能更好更快地适应需求变化。面向对象设计思想无法解决管理信息系统适应需求变化时遇到的困境,笔者认为:管理信息系统应全面采用元数据驱动开发,这是目前解决传统开发方式无法快速适应需求变化的问题的最佳途径。

接下来从元数据的定义、历史、作用等各个方面详细讲述为什么推荐采用元数据驱动开发。

什么是元数据

元数据是描述数据的数据,元数据可以描述静态结构内容,也可以描述动态过程、流程、行为和事件等,按描述的内容可以分为两类:

  1. 静态元数据 - 描述事物的结构

    比如描述客户表有如下字段:编号(上限20字符,唯一)、客户名称(上限100字符,下限1字符,唯一)、电话(上限20字符)、地址(上限200字符)、业务员(引用职员表,不允许空)、备注(上限500字符)。

    上面的元数据描述了客户表的静态结构,规定了客户表中存放的数据应符合的规范要求,这种元数据就是静态元数据。

  2. 动态元数据 - 描述数据变化,并制订规则

    比如描述新增订单保存之后如何增加库存上对应商品的数量;或者描述流程的各个步骤,每步的审批人和下一步骤等。

    上面的元数据要么描述动作行为发生对数据的影响;要么描述数据流转过程,每一步怎么做,下一步到什么步骤等等。都是对动态变化的描述,称为动态元数据。

静态元数据与动态元数据

静态元数据和动态元数据并不是泾渭分明的,往往相互包含,比如描述客户表的元数据大部分都是静态元数据,规定了字段名称、大小等,但也会将字段的计算公式记录在该元数据中。计算公式算是动态还是静态呢?一般认为公式计算是一种处理数据的过程,认定为动态,但这个动态元数据一般都会放在定义字段的静态元数据中。所以在工程实践中没有必要严格区分某个元数据是属于静态还是动态,提出这个概念仅仅是让大家更容易理解元数据的用途。

对元数据的使用由来已久

从有计算机软件程序开始不久,差不多就产生了对元数据的使用,比如:很多程序运行时会加载的配置文件就是元数据。程序是静态的,配置文件是动态可变的,用配置文件的目的就是为了适应环境的变化,这就是元数据的典型应用。从这个角度来说,元数据的出现远远早于面向对象的出现。

面向对象思想的出现解决了软件开发中的很多问题,让代码更清晰、易复用、好扩展,很快就一统天下。但即使是面向对象编程,也离不开元数据,只要无法硬编码写死的地方,就需要设计成配置的方式由程序在运行时读取并按配置运行,这就是元数据。

对元数据的使用由来已久

元数据的历史悠久,在很多软件中都或多或少的在使用元数;许多管理信息系统中也使用了元数据,有些系统用元数据比较少,而有些系统用元数据多一些。元数据用得多的,说明程序中很多地方没有硬编码写死,程序的灵活度就会高一些。如果把元数据用到极致,把管理信息系统中可能的变化都用元数据来承载,程序的灵活度也会到达极致,这就是元数据驱动开发的由来。

在阐述设计思想之前,先对元数据这个核心概念进行梳理。

元数据可以解决什么问题

元数据驱动开发的设计思想就是把“写死的逻辑”变成“活的规则”,解决由于对象被封装封死变化导致的种种问题。用大白话来说,别把东西做死在代码里,而是写一份“说明书”(元数据),告诉程序:“这玩意儿长啥样、能干啥、要守什么规矩”。至于具体怎么干,交给一个“万能机器(引擎)”照着说明书去跑。比如:要实现对数据表的查询功能,不直接实现对某个数据表的查询,而是先用表的元数据模型描述数据表,然后再用查询操作元数据模型、查询页面元数据模型、控件布局元数据模型一起就可以实现查询功能,最后再用菜单元数据模型可以把查询页面挂入菜单,实现完整的查询功能。如果要实现数据表的数据新增功能,则可以将表元数据模型、新增操作元数据模型、新增页面元数据模型、控件布局元数据模型组合在一起实现,最后查询页面加个链接控件链接到新增页面。

传统硬编码与元数据驱动对比

通过多个元数据模型组合来实现功能,每个元数据模型都可调整元数据,灵活度高。比如:数据表要增加字段验证,只需要调整表模型增加验证即可;数据表要增加字段权限控制,只需要调整字段模型要求单独控制权限即可;数据表要增加数据范围控制,只需要在操作模型加上数据范围限制即可。不同的需求可以调整对应的对应的元模型即可快速实现,无需开发人员进行编程实现。实现各种功能只需要配置和调整元数据,无需借助编程,因此也称为零代码方式。

以元数据驱动开发设计思想并不是要放弃面向对象思想,而是补充和微调面向对象思想。对于一些与业务强相关的或者变动频繁的对象,不再进行对象封装固化,而是改用元数据模型去描述目标。系统中这些以前封装固化的对象变成了用元数据定义的元模型对象,总结起来就是:不封装变化,要拥抱变化,用变化封装变化

遇到的困难:完备性与易用性之间的矛盾

虽然从理论上可以推导出元数据驱动开发有明显的优势,但实际上当前大部分的管理信息系统仍然采用传统面向对象方式开发。除了传统开发方式惯性的原因之外,还有元数据驱动开发方式本身的原因。

这就说说元数据驱动开发的现状和问题,元数据驱动开发虽然不是新技术,从提出至今已有约50年的时间,按道理应该已经比较成熟完善了,但实际情况并不是这样。管理信息系统属于信息技术和管理思想的交叉领域,50年来信息技术和管理都在快速变化和发展,元数据驱动开发也必须要同步的变化和发展。但就目前而言,业界流行的元数据驱动开发的解决方案并不完善,普遍存在下面两个问题:

  1. 一类元数据模型过于简陋,只能实现一些部门级应用,稍微复杂的应用就配不出来,或需要编程开发插件来实现。
  2. 另一类元数据模型过于复杂,简直就是发明了一门新的编程语言,充满了各种难懂的术语和新概念,上手难度极高。

前面两类元数据模型都没有体现出元数据驱动开发的真正优势,笔者认为,优秀的元数据驱动开发应该同时符合下面的要求:

  1. 完备性 - 能够完全通过元数据驱动开发实现目前主流的管理信息系统的主要功能。
  2. 易用性 - 理解、掌握及使用的难度不能太高,非编程专业人员通过短时间的就能快速掌握。

完备性与易用性的平衡

符合上面要求的元数据驱动开发平台,就可以实现让非专业人员自行开发管理信息系统(如:OA、CRM、进销存、ERP等)的目标。遗憾的是,市面上流行的元数据驱动开发产品都还无法同时满足这两点要求,尤其是无法满足完备性要求,只能做一些部门级的简单应用,无法实现真正的管理信息系统。

要满足完备性要求,就必须对管理信息系统的全过程都进行元数据模型化,用元数据模型描述管理信息系统的每一个环节,这种做法称为:全过程元数据模型化

元数据驱动开发的效率问题

任何事物都有两面性,元数据也不例外,带来好处的同时也会带来一些新问题,如不妥善解决这些新问题,元数据驱动开发带来的价值就会被抵消殆尽。接下来逐一说明元数据驱动开发带来的新问题以及解决办法:

1. 开发效率问题:用元数据取代编程语言,相当于一换一,并没有减少多少工作量

如果元数据只是把代码换成了另一种类似的写法,那确实不见得省事。但元数据驱动开发真正的效率来源并不是“换表达形式”,而是来源于以下三点:

1. 从“过程式指令”转向“声明式意图”:

放弃使用一维线性代码描述“如何实现”(How),转而使用多维结构化元数据直接描述“是什么”(What)。元数据直接映射现实世界的三维业务概念(实体、属性、关系、审批流、生命周期),消除了将现实业务翻译为机器指令的中间损耗。

2. 认知维度的升维:

承认人类认知的局限性——人脑更擅长处理结构化、可视化、空间化的信息(即“文不如表,表不如图”)。元数据驱动开发通过将配置手段从文本编辑升级为可视化建模,使开发者的注意力集中在高维度的业务逻辑上,而非低维度的语法细节。

3. 通用能力的引擎化:

将通用的技术复杂度(持久化、事务、权限、UI渲染、API生成)封装至底层引擎。元数据不再仅仅是配置文件,而是底层通用引擎的输入。这意味着,一次引擎优化即可惠及所有基于元数据构建的应用。

元数据驱动开发的效率提升

对于“一换一”的质疑,只能从工程实践的角度来验证效率:

非对称性收益:虽然从“写代码”变为“配元数据”看似都是人力投入,但由于元数据是高度结构化的,它天然具备被机器二次处理的能力(自动生成文档、自动化测试、一键部署、运行时热更新),而线性代码不具备这种可塑性。

技能栈的扁平化:元数据配置对“具象事物”的描述,大幅降低了对开发者“抽象算法能力”的依赖,使得业务专家或非资深开发人员能直接参与构建,扩大了生产力基数。

消除维度鸿沟:只要停留在文本代码层面,维度差异带来的理解鸿沟无法消除。元数据驱动开发通过可视化手段,将抽象逻辑还原为接近现实世界的三维感知方式,从根本上提升了理解与沟通效率。

2. 运行效率问题:元数据驱动开发的管理信息系统的运行效率会不会比较低

从纯理论角度看,元数据驱动确实会引入一层固有开销:系统需要在启动时或运行时加载元数据,将其解析并构建为内存中的运行时模型(Schema/Plan),请求处理逻辑也要经过通用调度层。相比之下,纯代码编写的系统直接执行编译后的指令,少了这一层抽象。

但在实际工程实践中,这种差距通常极小,甚至在综合效能上元数据驱动更具优势。原因如下:

1. 瓶颈位置决定了差异不明显
管理信息系统的性能瓶颈绝大多数集中在数据库查询、网络传输、磁盘 IO 和整体架构设计上。应用层多几次字典查找或间接分派所带来的 CPU 开销,相对于数据库的一次全表扫描或网络往返来说,几乎可以忽略不计。

2. 引擎的可优化性更强
一个通用的元数据引擎(如表单引擎、流程引擎)具有极高的复用价值,团队可以持续投入进行预编译、计划缓存、热点代码特化及批量优化。而传统手工作业往往是“一次性项目代码”,受限于人力和进度,很少有机会进行深度的底层性能迭代。

3. 类比关系数据库的启示
关系型数据库本身就是最成功的元数据驱动系统(依赖系统表定义结构),其高性能并非因为“没有元数据”,而是得益于高度优化的执行引擎和计划缓存。成熟的元数据驱动管理系统也会走向这一工程形态,通过缓存和预编译将解释成本降至最低。

元数据驱动开发的软件运行效率也可以很高

需要特别说明的是,元数据驱动并不等同于“自动高性能”。工程中最容易翻车的往往不是抽象层本身,而是通用化带来的数据访问形态劣化,例如:

  • N+1查询问题:因通用关联加载导致的循环查询;
  • 权限过滤不下沉:将行级权限校验留在应用层而非下沉至SQL层;
  • 缓存失效抖动:元数据变更引发的模型重建风暴。

只要在设计上规避这些陷阱,元数据驱动系统在运行效率上完全可以与纯代码系统持平,且在架构一致性和维护成本上具有显著优势。

元数据驱动开发前景展望

这里秉持大胆假设,小心求证的态度,提出一些对未来发展的设想:

展望一:所有管理信息系统最终都会走向元数据驱动

所有管理信息系统最终都会走向元数据驱动

这里的管理信息系统包括OA、CRM、ERP、工单、进销存、生产管理等等,无关企业或个人的意愿,最终都会被需求倒逼着走向元数据驱动开发方式。元数据驱动开发方式的开发效率是使用传统编程开发方式的数倍,当元数据驱动开发方式的软件和传统编程开发的软件的功能、用户体验和运行效率达到某个值时(比如90%),量变就会引发质变。

展望二:AI会促进元数据驱动开发的发展

现在AI编程很火热,很多人认为AI编程将要淘汰传统编程开发行业,而元数据驱动开发也属于被淘汰的范畴。笔者认为,持这种想法的人既不了解AI,也不了解编程。

从原理角度来看,AI是个不稳定系统,出错是难免的,即使通过不断完善来减少错误,以及多轮迭代来修正错误,最终评判并接受结果时还是需要人。用一句哲学上的话来说,人是AI的最终目的,如果没有人使用AI,AI什么也不是。

所以说对AI技术的定位永远都是人的辅助,也许短期会出现龙虾这种比较冒进的AI,但最终大家都会回归理性,让AI回归到辅助的角色上。因为基于权利和责任对等的原则,谁给了AI权利,谁就必须为AI做的事情负责,AI最终的定位,就类似于你养的宠物一样,受你的管辖,同时你也要为它的一切行为负责。

AI会促进元数据驱动开发的发展

有了AI的辅助,元数据驱动开发可以把更多的精力放在业务需求上,当需求整理规划完成,把需求材料输入给AI,AI给出对应的元数据配置。和传统编程相比,元数据的基本要素比编程语言来说要简单很多,元数据的变化也远比编程语言的变化少,AI学习掌握元数据比编程语言更容易,运用元数据来实现需求也会更加稳定可靠。

展望三:元数据驱动开发产品的核心竞争力是元数据和驱动引擎

前面已经提到,好的元数据建模应同时符合易用性完备性两项要求,业界已有不少的产品符合易用性要求,但少有产品符合完备性要求,能同时符合易用性和完备性两项要求的产品几乎没有。

优秀的元数据驱动产品 = 优秀的元数据建模 + 稳定高性能的驱动引擎

驱动引擎是运行效率的关键,在已经有优秀的元数据设计之后,就应不断迭代优化元数据模型的驱动引擎。

优秀的元数据驱动产品 = 优秀的元数据建模 + 稳定高性能的驱动引擎

展望四:私有部署的产品在国内市场的份额会显著提升

目前国内很多元数据驱动开发方式的产品主要都是采用SaaS/公有云模式,私有部署的市场份额还比较小。在全球视角下,私有部署不是主流,将来成为主流的可能性也暂时没有。

私有部署的产品在国内市场的份额会显著提升

但全球市场的逻辑不适用于国内市场,信创、等保、数据主权这三条规则几乎已经把私有部署定为了必选项。即使是不受上面三条规则约束的客户,也会倾向于私有部署,这是由文化基因决定的。数据主权意识并不是只有大企业有,中小企业在有条件的时,也会积极考虑。在国外SaaS方式大行其道,也是由文化基因决定的,千篇一律的东西在国外往往更容易推广。而在国内的情况就截然相反,一千个人会有一千个想法,支持个性化的东西更容易获得大家的认同。SaaS模式在国内不会成为主流,只会是一段时间内基于成本考量的暂时选择,一旦有条件自立门户,客户必然会毫不犹豫地离开。

附录1:元数据、零代码与低代码的关系

采用元数据驱动开发的不一定是零代码,因为元数据在很多地方都会使用。所有宣称零代码的产品本质上都是采用元数据驱动开发实现的,因为不写代码编程,总需要有个载体来承载之前代码编程包含的信息,这个载体就是元数据。所以零代码方式可以等同于元数据驱动开发;但反之不成立,因为有部分采用元数据的情况,这种情况还需要再编写代码来实现许多功能,这种方式也称为低代码。

业界将零代码和低代码都统一归类为低代码,从广义角度而言,元数据可以算是一种领域特定语言,统一归为低代码也符合一定逻辑。但笔者并不认同这种混淆的归类和命名,低代码是借助了大量的元数据直接生成代码或运行元数据模型,从而实现减少代码编写量的目的,这里面的重点还是元数据,而不是写的代码少,取名为低代码属于是以偏概全。把全盘使用元数据的零代码也归为低代码就是混淆概念,一来零代码方案里面没有传统代码,不应该称为“低”代码;二来如果把元数据也视为代码的话,这个代码量并不低,也不应该取名“低”代码。更清晰的名字应该是元数据驱动开发,零代码这个名字容易让人误解,其实是有代码的,是一种名为元数据的代码。

http://www.jsqmd.com/news/896316/

相关文章:

  • 保姆级教程:COCO数据集2017版下载与解压全流程(附官方链接与常见错误排查)
  • 从AT指令到示波器:一步步拆解模组不识卡的硬件与软件排查
  • GEO优化服务商哪家正规?场景化深度测评:真实评价 - 速递信息
  • GEO优化服务商选型参考:四类需求分析与常见问题梳理 - 速递信息
  • ECDICT:免费开源的终极英汉词典数据库完整指南
  • 2026年 环氧地坪漆厂家推荐榜单:地坪漆/自流平/彩砂环氧砂浆,家用工业耐磨防滑优选品牌深度解析 - 企业推荐官【官方】
  • 开源小说创作神器novelWriter:5步打造专业写作工作流
  • 揭秘Windows Cleaner:一款专治C盘爆红的开源清理神器
  • 手把手教你用STM32 HAL库驱动MA730/MT6835编码器(附完整SPI配置与避坑指南)
  • AppleRa1n终极指南:三步实现iOS 15-16激活锁绕过
  • AMOS验证性因子分析保姆级实操:从画图到结果解读,一篇搞定论文数据分析
  • 盐城黄金上门回收哪家靠谱?福运来口碑领跑 - 上门黄金回收
  • 用Python模拟SIS模型:从微分方程到代码实现,可视化疫情传播全过程
  • MATLAB图像处理实战:从IFFT2逆变换到灰度频谱的算法验证
  • 宜宾黄金回收实地探访:无滤镜测评,福昌夏领跑榜单 - 黄金上门回收
  • 2026 合肥黄金验金方式详解 本地专业鉴定干货分享 - 合扬奢侈品交易中心
  • APK安装器:Windows上的安卓应用革命,告别模拟器时代
  • 西门子授权文件藏哪儿了?WinCC/TIA Portal许可证的‘AX NF ZZ’文件夹全解析与备份指南
  • 从零到稳:STM32平衡小车PID参数整定实战手记
  • 嘉善银城驾驶员培训:B2大车驾驶证专业培训哪家好 - LYL仔仔
  • 昭通黄金上门回收机构哪家更靠谱?实测排名福昌夏领先 - 黄金上门回收
  • 珠海港式火锅技术标杆:從汤底到食材的硬核解析 - 奔跑123
  • 2026年南通短视频拍摄与AI全网推广完全指南:从有号无客到精准获客闭环 - 年度推荐企业名录
  • 淡纹最好的眼油推荐?涂CA眼油,眼角细纹慢慢隐形不见 - 全网最美
  • 深入AXI Interconnect内部:图解Crossbar、耦合器(FIFO/Clock Converter)如何协同工作
  • Dina开源项目:构建拥有密码学身份与安全保险库的个人AI伴侣
  • 2026苏州手表回收门店实测,6家正规渠道实力深度测评 - 薛定谔的梨花猫
  • Windows Defender移除实战指南:系统优化与性能提升的深度解析
  • 融合句法树与主题注意力的社会情绪分类模型实战解析
  • 告别乱码!手把手教你用LVGL官方工具在STM32F4上显示任意中文字体(附完整代码)