
大家好,我是人月聊IT。
今天我准备再通过两三页PPT来讲解一下本体论建模,思想理念是怎么样实现传统的OOP功能实现的完整闭环的。

首先我们还是再来看一下,从面向对象到本体建模,它中间发生了一个变化。对于常见的面向对象分析设计,大家都比较清楚。我们主要是会对相关的业务需求进行分析以后抽象核心的对象,也就是我们常说的class的类。
这个对象里面本身就包括了相关的对象属性和对象方法。传统的对象建模里面其实没有规则这个东西,规则往往是融合在对象方法里面的。比如说合同对象,它有合同保存、更新合同状态这些方法。那么在合同保存这么一个方法里面,它可能就会去调用实现多个业务规则的处理,比如说完整性校验、预算校验都有可能。这个是传统的面向对象分析建模。
然后在我前面讲本体论建模的时候,我也讲了本体论建模的核心三个点就是对象建模、行为建模、规则建模。
为什么把行为和规则建模单独拎出来?
我当时也说了一个关键的理由,就是我需要对行为建模和规则建模通过独立的业务语义文档来进行建模,实现行为规则和对象之间的一个解耦。在对象建模里面,包括数据建模和数据关系的建模。在行为建模里面,包括了方法和事件的建模。通过解耦以后,这么一个元模型就更好的可以基于我们的业务场景的变化,灵活的去组装和组合。
比如说我现在出现了一个新的业务场景或流程的时候,它分为了1、2、3、4步。那么这些方法步骤里面,它可能就会调用我底层已有的各种行为去进行组合和组装,同时每个行为里面,它可能又会去引用我已经形成的各个业务规则。比如说像这个图里面,我的行为二可能会引用到规则一和规则四,行为四可能引用到规则三。
我通过这种对象、行为、规则拆分以后的这么一种元模型语义描述,可以更好的灵活的应对你实际的业务场景、业务需求的这么一个变化。
好了,言归正传,那实际的我们的面向对象分析设计和我本体论里面的面向对象建模有哪些区别呢?
所以我在这个地方准备了两页PPT,让大家更容易理解。

第一个就是叫什么呢?
传统的OO建模,它更多的是为了OLTP或者是实现某一个业务功能而进行的建模。举一个简单的例子,比如说现在我已经实现了销售合同录入管理的功能。那么这个时候我录入一个销售合同的时候,它就一定会最终到合同对象上面来。合同对象就要去完成相关的属性的填充,然后合同对象去执行调用合同保存方法。合同保存方法里面,它又会去调用相关的执行的业务规则,类似于合同校验、交期承诺检查。在合同保存方法执行成功以后,它最终可能还返回给业务用户一个保存成功的结果。
类似于采购订单也是一样的道理。你去录一个采购订单,它会调用到采购对象、采购订单对象,采购订单对象去执行保存方法,最后返回保存成功。
在采购订单的录入和销售合同录入这两个独立的业务功能的时候,大家可以看到,实际我并没有发生什么关键的一些关系或者是联系。但是实际对于销售合同或者是采购订单的管理,它可能是我整个供应链LTC端到端里面一个大的本体,它是一个大的模型。
它们之间其实还有相当复杂的相互约束、相互影响的关系。所以再回到我们的整个的本体论建模,它是怎么样来实现闭环的呢?

我在前面也专门举过这个例子。
大家可以看到,当我去录入某个物料供货延期的时候,按传统业务功能的实现也是一样的。它会调用到采购订单对象,执行订单变更方法,然后返回保存成功。但是传统的业务功能做到这个地方以后,传统的业务功能实现就已经完成了。但是我们实际的本体论的模型,它实现关键的闭环这个动作没有完成。
里面有一个关键的东西,它其实仍然是借鉴和引用了事件驱动架构的思想。也就是说物料供货延期,这个你实际的数据录入保存成功以后,它一定会去触发一个供货延期的事件。这个供货延期的事件就会进到我们的消息流的管道。进入到这个管道的时候,它就会去触发相应的规则,类似于合同校验、类似于交期承诺检查、类似于我的销售合同交期是不是要调整。
当它触发了这些规则,规则执行完了以后,它其实这个时候也是需要去变更合同的关键属性信息的。所以这个时候它又去调用回写的API去执行了相关的合同保存,最后自动的完成了合同交期的这么一个调整。
逆向闭环:事件-》规则-》行为-》回写API-》更新数据
所以大家可以看得到,当物料供货延期以后,它实际上是我刚才的从行为到规则到最终数据落地存储这么一个过程的逆向。通过这个逆向更好的实现了整个过程的一个闭环。
这个闭环里面核心的一个点就是事件驱动。通过事件驱动反向的触发规则,通过规则反向的触发相关的数据的回写,最终完成一个自动化的数据的调整。虽然说本体建模里面仍然是面向对象的分析设计,包括我们说的对象、属性、行为、规则、方法,但是它刚好是实现业务功能的这么一个完整过程的一个逆向。
通过逆向、通过事件驱动更好的衔接了我已有的传统的各个业务对象或者是数据对象。所以当我把这几页PPT讲完以后,大家可能就更加容易理解。虽然说传统的面向对象分析建模、本体论建模核心都是OO的建模,但是为什么说本体建模可以更好的去实现相应的回写和闭环?就是这么一个道理。
好了,今天的简单分享就到这里,再见。