低代码开发平台的设计与实现:基于元数据模型
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.4 getInst服务

getInst服务负责从数据库获得实例,服务定义原型为 public ReturnMessage〈Inst〉getInst(CommonInfo commonInfo, String businessType, String dnaCode, Object cellKey),参数businessType和dnaCode可以唯一定位到实例的Dna。cellKey是实例的键值,是通用Object类型,考虑到在数据库中,键值不一定是Long类型,有可能是String类型。为了兼容不同键值类型,采用Object定义Java键值的数据类型。具体映射到数据库是整型还是字符串,交由DM层或者DAO层来解决。在saveInst服务中,需要利用DnaDbMap对象指导服务如何将实例映射到数据库,同样地,在获取实例时,也需要在DnaDbMap对象的指导下,从数据库中获取数据,并填充到实例。InstService.getInst服务代码如下:

img

首先根据businessType和dnaCode得到Dna对象dna,然后调用instDMService.getInst服务(dna作为其中参数之一)。从DM层返回实例之后,设置operationFlag为“未修改状态”,返回结果。instDMService.getInst的代码如下:

img
img

InstDMService.getInst调用instDAO.getInst服务,后者返回当前cellKey对应的实例对象inst,它的属性cells包含一个Cell对象,但不包含Cell对象下的孩子children(Map类型)中的实例对象。当InstDMService.getInst得到实例后,调用InstDMService.getChildInst服务,后者递归地将实例的属性cells中每一个对象下的孩子实例及其子孙实例补充完整。InstDMService.getChildInst调用InstDAO.getInstByParentKey返回孩子实例。

img

DMSerivce.getChildInst服务以父实例为参数,调用instDAO.getInstByParentKey返回孩子实例(多个),然后递归调用返回子孙实例。如果dna.cursice为true,表示dna是递归节点,视同dna为孩子Dna,也要递归调用getChildInst将父实例对象补充完整。