基于低代码PaaS对于对象、模型及组建关系的全新解析
2022-09-27
低代码技术与组件化趋势之间有着天然的基因级的融合优势,这种融合来自于共同的解耦到封装的构建思路。但是,如何严谨规范地做好业务解耦,如何全面实现组件和业务之间的准确匹配,如何对于对象的定义和层级进行划分,对象、模型、组件三者之间的关系如何界定,目前业界缺乏统一完整科学规范的方法论。本文就试图对上述问题予以探讨。
可组合的业务(Business Composability)已经被Gartner倡导认为是应对业务创新中不确定性的最佳策略和方法,其核心思想是将具备业务共性的业务元素沉淀形成组件化模块化,以便快速地搭建新的应用。Gartner为我们揭示了业务中、后台的拆分要遵循的三条核心原则:一是可复用,二是跨系统的共享,三是聚焦业务逻辑而非业务执行。
业务流程的抽象和业务功能的拆分为针对领域模型为核心的驱动设计以及服务化(微服务)在平台功能抽象拆分提供了相对值得借鉴的思路,催化了以业务功能细分作为域划分的依据的组件化方案,主要诉求是在细分的业务功能组件服务基础上,能按需快速灵活地组合,从而支撑不同的业务模式,提供业务敏捷性,支撑业务创新求变。
而且,这种灵活组合的另外一个容易被忽略的潜在价值在于试错成本的最小化。业务创新并不一定总是成功的,如果拆除一个失败的创新业务,组件化的架构也不会影响其他正常业务,其业务价值就是极大的打开了业务创新的施展空间而无需担心高昂的试错成本,这就使得通过新一代组件化架构对类似ERP、PLM等大型传统应用予以重构带来可能。
看起来前景无限光明的业务组件化,其前提条件毫无疑问是组件对业务的支撑能力,而这种能力,就来自于对业务科学规范的解耦和映射的方法。
业务元素应该包括业务对象、业务要素、业务逻辑和业务规则等,将业务元素封装在组件中的核心技术就是对象建模。应该说,对象建模本身并不是高不可攀的技术,通过各维度的数据从逻辑和属性上对业务实体做出科学准确的表达是可以实现的。这其中最大的挑战在于对于对象的定义和分级,由此梳理清晰对象的边界和组件之间的协作模式,为后续的敏捷开发奠定基础。显然,混乱的业务组件必然会对整体应用搭建造成隐患,如果对象定义不够清晰,模型和组件层级没有准确匹配业务域和业务能力的支撑,对应用开发将是灾难性的。
真正的难度在于如何准确地区分并定义不同层级的对象、组件形成完整的与业务的对应关系,这当然需要科学方法论的指导。这个方面,传统企业EA架构理论中从业务模型到数据模型的严谨规范的设计思想以及数据治理思想中概念数据模型等理论值得借鉴。以下举例说明。
在轨道运维业务中,我们形成了完整的从业务能力(业务域)-业务流程-业务实体-数据模型的分析梳理过程。轨道运维业务能力如下图所示:
匹配业务能力要求的业务流程如下图所示:
在上述业务流程涉及到的业务实体如下图:
梳理完所有的业务流程、业务实体、数据实体后可以将对象作出根据不同业务域的清晰的层级划分,如下图:
最终形成完整统一的轨道运维概念数据模型,如下图:
可以看出,这是一个完整的从具体到抽象的高度提炼概括的过程,整个过程紧密贴合实际业务,全面客观地对应业务实体和业务对象,最终实现数据对业务的准确映射。
上述这个过程也是我们对象定义和建模、组件定义和分级、模型定义和分级的核心依据!
例如我们对“钢轨”这个实体对象做建模,通过9个逻辑维度、63个逻辑要素做好元数据定义和约束,并形成关于“钢轨”这个对象组件,由此来支撑所有需要“钢轨”这个组件的领域模型建设。
而“钢轨”、“焊缝”、“扣件”、“轨枕”、“道床”、“道岔”、“伸缩调节器”、“接触轨”、“轨道附属设施”等所有的对象完成建模和组件化后就可以完成“基础设备信息”这一业务域的局部领域模型建设,这个模型对应的就是数据模型中的一级主题域,也可以对应业务模型中的一级业务域。而所有的局部领域模型建设完成,就可以实现针对全业务的领域模型。
对象、组件和模型其实都是有层级的,是必须严谨对应到业务上的,也只有这样的严谨,才能将业务中那些最难发现的、隐藏在实际业务中的业务逻辑和业务规则完整继承下来。并且,这种分析和梳理的过程,也是对IT核心资产的完整继承。IT的核心资产,其实应该是现有系统中已经在运行、并证明对业务有真实支撑能力的业务模型和数据模型,而上述解耦和封装的过程,是完全基于对业务模型和数据模型科学严谨的学习和理解的过程。
以上是方法论思想的论述,更为技术角度的解读是从平台业务系统的逻辑模型到物理模型的直接映射为造成问题的主要因素来出发的。既然物理模型的变更是平台不稳定的动因,那么我们是否能通过解耦业务逻辑模型和物理模型的映射关系来尝试解决这个问题呢?
基于上述的事例,我们需要对业务进行建模,对业务进行抽象,定义出业务逻辑模型,然后对模型进行二次抽象,定义出逻辑模型的定义数据,实现业务模型的数据化,即模型的元数据(The Metadata of the Logic Model),将模型结构存储为数据,而不是直接对应的物理存储结构。其次根据定义出的元数据进行统一抽象,形成元数据逻辑模型。将元数据逻辑模型映射到元数据物理模型,对应实际存储结构。
通过对业务模型的变更形成对元数据层的数据变更,而不是物理结构的变更,从而实现业务逻辑模型同物理模型的解耦。当然反过来,由于纵向功能细分,业务功能域增多,整个业务链条上的咬合点越来越多,
于是,可以得出的结论是,最小业务组件颗粒其实就是描述最小业务实体所对应的业务对象,而组件要素就是描述最小业务对象所对应的元数据!而将该元数据所对应的所有业务逻辑要素(属性和规则等)同业务对象一起做好封装就形成了最小业务单元组件!
这其实就是传统的业务逻辑模型的实现过程的组件化。将某一业务域所有业务组件做有机整合,结合流程模型、报表模型、页面模型和集成模型等,就完整了一个业务流、信息流和数据流三流合一的领域模型!所以,领域模型其实就是真实反应业务应用的物理模型。
本文试图第一次详细准确的描述对象、组件和模型之间的定义和关系。这三者是整个低代码PaaS平台最为核心的概念之一。
对于正在考虑重构的业务系统而言,对于既有IT资产中最为核心的业务模型和数据模型的继承就是采取上述的梳理方法,然后通过低代码做好对象建模的整体设计工作,这样的重构才是严谨规范的,是成功交付的保障。
对于新建业务系统而言,上述过程其实就是新一代敏捷开发的全部基础。敏捷开发绝不仅仅是简单的迭代,我们认为敏捷开发是在完成领域模型后的搭建过程,而其核心基础对业务的解耦和组件化的工程。