我的思路是这样的:我们花了十几年做"业务对象数字化"——把客户、产品、物料、组织这些"名词"统一定义、统一管理,放在数据中台里。那业务逻辑——那些"动词"——为什么不能用同样的思路来做?对象有对象的模型。逻辑也应该有逻辑的模型。对象有统一的管理平台(数据中台)。逻辑也应该有一个统一的管理平台——我创造了一个概念,叫做"逻辑中台"。对象通过CRUD接口对外提供服务。逻辑也应该通过某种接口对外提供服务——当某个条件满足时,触发某个动作。那逻辑用什么语言来描述?我想了很久,最后的结论是:创造一种新的语言,我称之为"流程描述语言"。我当时的类比是SQL。SQL是什么?SQL是你用一种接近自然语言的语法,告诉数据库"我要什么数据"。你不需要知道数据存在磁盘的哪个位置、用什么索引。你只需要写"SELECT * FROM customers WHERE city = 'Shanghai'",数据库引擎帮你翻译成底层的磁盘读取操作。我想做的,是业务逻辑领域的SQL。用一种结构化的、接近业务语言的语法,描述"当什么条件满足时,做什么动作"。然后一个"解释器"——类似数据库引擎——把你的描述翻译成系统能执行的逻辑。我甚至开始设计这套语言的雏形。
三
我设想的语法大概是这样的:以PLM里一个真实的场景为例:当图纸的状态变更为"发布"时,与这张图纸关联的所有Part启动发布流程,并检查发布CheckList。如果用我的"流程描述语言"来写,大概是:WHEN 图纸.状态 CHANGES_TO "发布"THENFOR EACH Part WHERE Part.关联图纸 = 图纸.编号START 发布流程EXECUTE 检查CheckListEND你看,它不是代码。没有类、没有方法、没有变量声明、没有异常处理。它读起来像一句业务规则的描述。一个研发工程师看到这段话,能立刻理解它在说什么。然后,一个"解释器"读取这段描述,把它翻译成PLM系统能执行的工作流调用、状态机变更、事件触发。在这个设想里,业务人员写规则,解释器做翻译,系统做执行。产品经理不需要翻译,程序员不需要翻译。翻译层消失了。我进一步设想:所有的业务逻辑,都用这种语言来描述,统一注册在"逻辑中台"里。逻辑中台建在数据中台之上——数据中台管"名词",逻辑中台管"动词",动词和名词绑定在一起,形成具体的动宾结构——满足什么条件的情况下,如何操作哪个对象。业务对象通过属性识别,与业务逻辑关联。图纸是一个业务对象,它有"状态"这个属性。当"状态"这个属性的值发生变化时,逻辑中台检测到这个变化,找到与"图纸"关联的所有业务逻辑,然后触发执行。这套机制如果成立,那"0改1再改回0"这种化石就永远不会再出现了。因为那条逻辑会被显式地写在逻辑中台里,所有人都能看见它,所有人都能理解它,修改它需要走审批流程,删除它需要做影响分析。我被这个想法激动了很长时间。