惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Troy Hunt's Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
T
Tenable Blog
L
LINUX DO - 热门话题
V
Visual Studio Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
SecWiki News
SecWiki News
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
W
WeLiveSecurity
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
S
Securelist
Spread Privacy
Spread Privacy
L
LangChain Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Last Watchdog
The Last Watchdog
Attack and Defense Labs
Attack and Defense Labs
博客园 - 司徒正美
Help Net Security
Help Net Security
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
博客园 - 【当耐特】
T
Tor Project blog

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12) Snack JSONPath 项目架构分析 Claude Code Buddy 小析:一个非核心功能,如何体现产品的细节完成度 AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南 化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量 从零实现富文本编辑器#13-React非编辑节点的内容渲染 AI开发-python-langchain框架(3-23-OpenAI Functions风格Tool Calling智能助手) .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut PbootCMS 网站内容数量多导致访问慢?这些实用优化方案帮你提速! - 家兴网络技术工作室 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 网站漏洞怎么发现并修复?一篇实用指南(附完整流程) - 家兴网络技术工作室 开了 TUN 模式还是直连?90% 的人都踩过这个坑 Github日报|2026年04月12日 - AI一族 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术 Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模 MicroPython LVGL基础知识和概念:底层渲染与性能优化 - FreakStudio 数据库草图算法 Python 潮流周刊#146:CPython 引入 Rust 的进展 - 豌豆花下猫 最小生成树 - mofei1116 红日靶场七:从外网入口、容器逃逸到 AD 接管的完整利用链复盘 - YouDiscovered1t 分享四款开源且实用的 Kafka 管理工具 - 追逐时光者 vLLM 权重加载机制全解析:从挑战到理想架构 LCT 学习笔记 - ACehomoxue Avalonia UI 12.0.0 正式发布:架构演进和性能飞跃 - 张善友 当 AI Agent 把调用链拉长,延迟开始成为一门生意 conhost.exe 无法显示 U+2717 - 145a 太秀了,我把自己蒸馏成了 Skill!已开源 - 程序员鱼皮 ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑 基于 Ghostty 带有分割标签页和为 Claude 编程设计的通知终端 - BugShare AI 焊死入口:教育的“操作系统级”重塑 - 郝hai 初级Java开发工程师使用sql脚本编写代码的过程是简单而且不糊涂 - CoderOilStation Claude Code通关手册(六):MCP协议完全指南 - 暮色之狐 边框灯光环绕动画特效实现指南 - Newbe36524 开源:子木蒸馏版的 SEO 审计工具 seo-audit-skill v1.0 我所理解的Python元模型 【从0到1构建一个ClaudeAgent】规划与协调-TodoWrite - 程序员Seven Claude 和 Codex 在审计 Skill 上性能差异探究 - ACai_sec AScript如何实现中文脚本引擎 - rockey627 【渗透测试】HTB Season10 Garfield 全过程wp - dynasty_chenzi Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革 树状数组正确性证明 - AC-wyr 你的 AI 焦虑,可能比 AI 本身更危险——ATM 机没有消灭银行柜员,但恐慌消灭了你的判断力 - 我没有三颗心脏 一个拉胯的分库分表方案有多绝望?整个部门都在救火! - 冰河团队 动态规划入门必学之走方格问题 - Ofnoname PostgREST 与 PostgreSQL 角色权限配置全解析(生产级实践) - SheepDog1998 使用 UEFI 图形输出协议 GOP 在屏幕上显示图像的方法 - 阿源- Claude Code通关手册(五):组建你的AI专家团队,子代理系统 - 暮色之狐 一个程序员到架构师的催婚路之感悟(整整10年后的催婚相亲感悟) - MisterLip 用 Agent Skill 自动生成工作周报 - 赵康
元数据驱动开发 - 面向对象编程思想的补充
良村 · 2026-05-27 · via 博客园_首页

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

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

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

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

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

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

元数据驱动开发

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

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

什么是元数据

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

  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:元数据、零代码与低代码的关系

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

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