一种基于业务流程模型的微服务设计方法及系统

文档序号:26138942发布日期:2021-08-03 14:22阅读:124来源:国知局
一种基于业务流程模型的微服务设计方法及系统

本发明属于计算机软件技术领域(服务建模技术),尤其涉及一种基于业务流程模型的微服务设计方法。



背景技术:

作为一个广泛采用的工程技术,软件建模指在进行实际软件开发之前进行详细的设计,绘制出系统的蓝图,在系统需求与系统实现之间架起桥梁。通过软件建模,可以帮助开发人员对系统整体结构得到深入了解,帮助缩短开发周期,并提升开发质量。

通常来说,无论是开发单体软件还是分布式架构的软件,设计人员需要在和用户沟通需求之后绘制出系统的业务流程模型(businessprocessmodelingnotation,简称为bpmn)。bpmn模型在描述系统内、人员之间、作业顺序等业务信息流方面具有重要的作用。一方面,设计人员需要从上层抽象层面来思考系统流程与数据间的逻辑关系,梳理系统需要实现的功能,绘制出一个详细的bpmn模型,才能在前期确定好系统架构,开发出更加符合用户需求的软件。另一方面,bpmn模型也能帮助开发人员更好的理解系统内的业务流程以及数据流动情况,以便更好地理解业务流程和不同部门或角色间的相互关系,提高软件的开发质量和效率。

在基于bpmn的整体业务视角基础上进行微服务设计时,目前还缺乏相应的自动化方法与工具的支持。设计人员往往需要从需求分析开始进行逐步细化,通过手工方式开展繁琐的建模设计,极大地拖慢了软件开发速度,前期软件建模过程已经成为软件开发效率的瓶颈。

时序图(sequencediagram,简称sd)描述了对象间动态交互能力,着重体现对象间消息传递的时间顺序,能够帮助开发人员进一步了解系统内部的逻辑结构,从而更高效的实现系统功能。对于基于微服务架构的系统,sd图能够帮助设计人员进行微服务的细粒度划分,从而很好的解构系统,构建出易于开发和维护的微服务系统。为此,本发明从bpmn模型出发,以时序图为中介进行微服务设计。



技术实现要素:

本发明所需要解决的技术问题和提出的任务技术是针对用户画出的bpmn业务流程图进行分析,自动转化为对应的时序图,基于生成的时序图自动生成微服务设计方案来帮助设计人员进行微服务设计,如果各个流程的输入输出信息都完整的话还能够自动生成微服务api接口并协助开发人员进行开发的一种建模方法。旨在帮助软件设计人员快速进行软件建模,轻松划分微服务架构,大幅缩短软件开发周期。

本发明的方法所采用的技术方案是:一种基于业务流程模型的微服务设计方法,包括以下步骤:

步骤1:将业务流程图转换为bpmn工程模型;

具体实现包括以下子步骤:

步骤1.1:读取bpmn的json文件,根据不同的json文件标准解析包装到对应的业务流程模型中;

步骤1.2:运用如下的解析转换策略转化为bpmn工程模型;

对于用gojs规范组织的源文件,运用gojs转换策略将步骤1.1中得到的bpmngojs工程模型转换成为bpmn工程模型;gojs模型中有link和node两个元素,gojs规范中的node元素封装了bpmn中的基本元素,包括泳池、泳道、事件、任务、网关;gojs规范中的link元素则封装了bpmn中基本元素之间的关系;gojs模型解析转换过程中会将node元素转换为bpmn工程模型中的对应节点,即原gojs模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原gojs模型中的事件、任务元素转换为bpmn工程中的网关对象,原gojs模型中的网关元素转换为bpmn工程中的网关对象,将link转换为bpmn中的连接关系工程模型中的元素顺序;

对于用activiti组织的源文件运用activiti转换策略将步骤1.1中得到的bpmnactiviti工程模型转换成为bpmn工程模型;activiti模型是一种嵌套模型,模型中节点最重要的属性有该节点的名称类型、该节点嵌套包含的子节点以及与该节点有关的所有连接关系;模型的组织层级结构是bpmn图包含泳池,泳池中包含泳道,泳道中包含事件、任务、网关、连接关系;解析转换过程中,迭代解析将原模型原activiti模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原activiti模型中的事件、任务元素转换为bpmn工程中的网关对象,原activiti模型中的网关元素转换为bpmn工程中的网关对象;利用原activiti中的层级关系以及链接关系,转换得到bpmn工程模型中对应节点的连接关系中;

步骤2:将bpmn工程模型转化为sd工程模型;

步骤3:将sd工程模型转换为sd外部存储模型供设计人员后续根据需要自行修改;

步骤4:运用转换规则分析sd工程模型进行微服务设计。

作为优选,步骤2中:

将步骤1.2中得到的bpmn工程模型中的泳池泳道转换得到sd中的参与者,即对于bpmn工程模型中的泳池与泳道,都一一对应转化得到sd中的一个参与者;

对于bpmn工程模型中的用户任务转换到sd中一条同步消息与一条返回消息,其中同步消息的发送者是该用户任务所在的泳道对应的参与者,接受者是该任务所在的泳池对应的参与者;返回消息的发送者是该任务所在的泳池对应的参与者,接受者是该用户任务所在的泳道对应的参与者;

对于bpmn工程模型中的手工任务转换到sd中的一条自关联消息,该自关联消息的发送者是该手工任务所在的泳道对应的参与者,接受者是该手工任务所在的泳道对应的参与者;

对于bpmn工程模型中的服务任务转换到sd中的消息;其中分为两种情况,当服务任务下一个节点处于同一泳道时,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是下一个节点所在的泳道对应的参与者;当服务任务下一节点处于同一泳道的时候,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是该服务任务所在的泳池对应的参与者;

对于bpmn工程模型中的脚本任务转换到sd中的自关联消息,该自关联消息的发送者是该手工任务所在的泳池对应的参与者;接受者是该手工任务所在的泳池对应的参与者;

对于bpmn工程模型中的唯一网关转换到sd工程模型中的alt结构,并将后续任务转化放置到alt结构中对应的小分支内;

对于bpmn工程模型中的并行网关转换到sd工程模型中的par结构,并将后续任务转化放置到par结构中对应的小分支内。

作为优选,步骤3的具体实现包括以下子步骤:

步骤3.1:将步骤2中得到的sd工程模型转换为sd的json模型或sd的yaml模型,即将工程模型中的参与者与消息转换到json模型或者yaml模型中的参与者与消息;然后执行步骤3.2将生成的时序图以文件的形式进行导出保存方便后续进行细化设计。用户可根据需要执行步骤3.3将生成的时序图以图片的形式进行导出保存方便用户展示使用;

步骤3.2:直接输出对应的sd的json模型或sd的yaml模型,设计人员获取到json模型或yaml模型之后能够在根据自己的需要进一步修改sd模型,从而更加细粒度的进行系统设计;

步骤3.3:获取到步骤3.2修改后的json文件或者yaml文件之后运用相应的sd底层绘制工具转换得到sd的png图片。

作为优选,步骤4的具体实现包括以下子步骤:

步骤4.1:运用转换规则分析步骤2中得到的sd工程模型生成微服务代码工程模型,即对于每个参与者,会生成一个对应的微服务,然后将与该参与者关联的相关消息,自关联消息、同步消息、异步消息转换生成该微服务下的一个api接口模型,消息上的参数对应转化到接口上的参数;

步骤4.2:根据微服务代码工程模型生成逻辑代码,每个微服务对应生成一个java文件,该微服务下的api接口模型会对应生成放置于该java文件内帮助开发人员进行开发;

步骤4.3:将逻辑代码打包。

本发明的系统所采用的技术方案是:一种基于业务流程模型的微服务设计系统,包括以下模块:

模块一,用于将业务流程图转换为bpmn工程模型;

具体实现包括以下子模块:

子模块1.1,用于读取bpmn的json文件,根据不同的json文件标准解析包装到对应的业务流程模型中;

子模块1.2,运用如下的解析转换策略转化为bpmn工程模型;

对于用gojs规范组织的源文件,运用gojs转换策略将子模块1.1中得到的bpmngojs工程模型转换成为bpmn工程模型;gojs模型中有link和node两个元素,gojs规范中的node元素封装了bpmn中的基本元素,包括泳池、泳道、事件、任务、网关;gojs规范中的link元素则封装了bpmn中基本元素之间的关系;gojs模型解析转换过程中会将node元素转换为bpmn工程模型中的对应节点,即原gojs模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原gojs模型中的事件、任务元素转换为bpmn工程中的网关对象,原gojs模型中的网关元素转换为bpmn工程中的网关对象,将link转换为bpmn中的连接关系工程模型中的元素顺序;

对于用activiti组织的源文件运用activiti转换策略将子模块1.1中得到的bpmnactiviti工程模型转换成为bpmn工程模型;activiti模型是一种嵌套模型,模型中节点最重要的属性有该节点的名称类型、该节点嵌套包含的子节点以及与该节点有关的所有连接关系;模型的组织层级结构是bpmn图包含泳池,泳池中包含泳道,泳道中包含事件、任务、网关、连接关系;解析转换过程中,迭代解析将原模型原activiti模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原activiti模型中的事件、任务元素转换为bpmn工程中的网关对象,原activiti模型中的网关元素转换为bpmn工程中的网关对象;利用原activiti中的层级关系以及链接关系,转换得到bpmn工程模型中对应节点的连接关系中;

模块二,用于将bpmn工程模型转化为sd工程模型;

模块三,用于将sd工程模型转换为sd外部存储模型供设计人员后续根据需要自行修改;

模块四,用于运用转换规则分析sd工程模型进行微服务设计。

作为优选,所述模块二包括以下子模块:

子模块2.1,用于将子模块1.2中得到的bpmn工程模型中的泳池泳道转换得到sd中的参与者,即对于bpmn工程模型中的泳池与泳道,都一一对应转化得到sd中的一个参与者;

子模块2.2,用于对于bpmn工程模型中的用户任务转换到sd中一条同步消息与一条返回消息,其中同步消息的发送者是该用户任务所在的泳道对应的参与者,接受者是该任务所在的泳池对应的参与者;返回消息的发送者是该任务所在的泳池对应的参与者,接受者是该用户任务所在的泳道对应的参与者;

子模块2.3,用于对于bpmn工程模型中的手工任务转换到sd中的一条自关联消息,该自关联消息的发送者是该手工任务所在的泳道对应的参与者,接受者是该手工任务所在的泳道对应的参与者;

子模块2.4,用于对于bpmn工程模型中的服务任务转换到sd中的消息;其中分为两种情况,当服务任务下一个节点处于同一泳道时,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是下一个节点所在的泳道对应的参与者;当服务任务下一节点处于同一泳道的时候,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是该服务任务所在的泳池对应的参与者;

子模块2.5,用于对于bpmn工程模型中的脚本任务转换到sd中的自关联消息,该自关联消息的发送者是该手工任务所在的泳池对应的参与者;接受者是该手工任务所在的泳池对应的参与者;

子模块2.6,用于对于bpmn工程模型中的唯一网关转换到sd工程模型中的alt结构,并将后续任务转化放置到alt结构中对应的小分支内;

子模块2.7,用于对于bpmn工程模型中的并行网关转换到sd工程模型中的par结构,并将后续任务转化放置到par结构中对应的小分支内。

作为优选,所述模块三包括以下子模块:

子模块3.1,用于将模块二中得到的sd工程模型转换为sd的json模型或sd的yaml模型,即将工程模型中的参与者与消息转换到json模型或者yaml模型中的参与者与消息;然后执行子模块3.2将生成的时序图以文件的形式进行导出保存方便后续操作,用户可根据需要执行子模块3.3将生成的时序图以图片的形式进行导出方便后续展示使用;

子模块3.2,用于直接输出对应的sd的json模型或sd的yaml模型,设计人员获取到json模型或yaml模型之后能够在根据自己的需要进一步修改sd模型,从而更加细粒度的进行系统设计;

子模块3.2,用于获取到子模块3.2修改后的json文件或者yaml文件之后运用相应的sd底层绘制工具转换得到sd的png图片。

作为优选,所述模块四包括以下子模块:

子模块4.1,用于运用转换规则分析模块二中得到的sd工程模型生成微服务代码工程模型,即对于每个参与者,会生成一个对应的微服务,然后将与该参与者关联的相关消息,如自关联消息、同步消息、异步消息转换生成该微服务下的一个api接口模型,消息上的参数对应转化到接口上的参数;

子模块4.2,用于根据微服务代码工程模型生成逻辑代码,每个微服务对应生成一个java文件,该微服务下的api接口模型会对应生成放置于该java文件内帮助开发人员进行开发;

子模块4.3,用于将逻辑代码打包,从而帮助简化开发人员的开发步骤,降低开发成本。

本发明首先读取用户绘制的bpmn模型,然后将该图转换得到内部的bpmn工程模型,运用转换规则将bpmn转化得到sd工程模型,针对sd工程模型可以运用可视化规则转换得到sd时序图,进一步协助设计人员进行微服务架构设计,设计人员不需要走完设计的整套流程,大幅简化了设计人员的设计难度,降低了设计成本。此外还能够基于各个流程中的输入输出信息,进一步自动化生成微服务api接口,辅助开发人员进行开发,从而缩短业务开发周期,降低开发成本。

附图说明

图1是本发明实施例的方法的整体流程图;

图2是本发明实施例的bpmn工程模型转sd工程模型的转换策略整体流程;

图3是本发明实施例的gojs源文件解析得到的gojs解析模型组织结构;

图4是本发明实施例的activiti源文件解析得到的activiti解析模型组织结构;

图5是本发明实施例的转换得到的bpmn工程模型的数据组织结构;

图6是本发明实施例的bpmn工程模型转sd工程模型的泳池泳道转换策略;

图7是本发明实施例的bpmn工程模型转sd工程模型的用户任务转换策略;

图8是本发明实施例的bpmn工程模型转sd工程模型的手工任务转换策略;

图9是本发明实施例的bpmn工程模型转sd工程模型的服务任务转换策略(下一个任务不在同一泳道);

图10是本发明实施例的bpmn工程模型转sd工程模型的服务任务转换策略(下一个任务在同一泳道);

图11是本发明实施例的bpmn工程模型转sd工程模型的脚本任务转换策略;

图12是本发明实施例的bpmn工程模型转sd工程模型的唯一网关转换策略;

图13是本发明实施例的bpmn工程模型转sd工程模型的并行网关转换策略;

图14是本发明实施例的sd工程模型数据组织结构;

图15是本发明实施例的sd工程模型转换得到的sdjson模型的数据组织形式。

图16是本发明实施例的sd工程模型转换得到的sdyaml模型的数据组织形式;

图17是本发明实施例的美团用户下单业务流程图;

图18是本发明实施例的运用此发明将用户下单业务流程转换后得到的sd图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。

请见图1,本发明提供的一种基于业务流程模型的微服务设计方法,包括以下步骤:

步骤1:将业务流程图转换为bpmn工程模型;

本实施例中,步骤1的具体实现包括以下子步骤:

步骤1.1:读取bpmn原文件并解析包装。其中本发明支持处理符合gojs标准与activiti标准的bpmn模型,首先会读取bpmn的原存储文件,读取之后会根据原存储文件的格式解析包装到对应的业务流程模型中,gojs标准的源文件会解析得到bpmngojs工程模型,activiti标准的源文件会解析得到bpmnactiviti工程模型。

步骤1.2:对于用gojs规范组织的源文件,运用gojs转换策略将步骤1.1中得到的bpmngojs工程模型转换成为bpmn工程模型。gojs模型中主要有link和node两个元素,gojs规范中的node元素封装了bpmn中的泳池、泳道、事件、任务、网关等基本元素,gojs规范中的link元素则封装了bpmn中基本元素之间的关系,从gojs源文件解析得到的gojs解析模型组织结构可参看图3。gojs模型解析转换过程中会将node元素转换为bpmn工程模型中的对应节点,即原gojs模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原gojs模型中的事件、任务元素转换为bpmn工程中的网关对象,原gojs模型中的网关元素转换为bpmn工程中的网关对象,将link转换为bpmn工程模型中的元素顺序。

对于用activiti组织的源文件运用activiti转换策略将步骤1.1中得到的bpmnactiviti工程模型转换成为bpmn工程模型。activiti模型是一种嵌套模型,模型中节点最重要的属性有该节点的名称类型等属性、该节点嵌套包含的子节点以及与该节点有关的所有连接关系。模型的组织层级结构是bpmn图包含泳池,泳池中包含泳道,泳道中包含事件、任务、网关、连接关系,从activiti源文件解析得到的activiti解析模型组织结构可参看图4。解析转换过程中,迭代解析将原模型原activiti模型中的泳池、泳道元素转换为bpmn工程中的泳池、泳道对象,原activiti模型中的事件、任务元素转换为bpmn工程中的网关对象,原activiti模型中的网关元素转换为bpmn工程中的网关对象。利用原activiti中的层级关系以及链接关系,转换得到bpmn工程模型中对应节点的连接关系中。

经过转化之后得到的bpmn工程模型具有较好的数据组织结构,方便后续对bpmn元素进行解析与转化,bpmn工程模型的数据组织结构可参看图5,工程模型的pool封装了bpmn中泳池、泳道,task封装了bpmn中的任务,event封装了bpmn中的事件,gateway封装了bpmn中的网关,sequenceflow封装了bpmn中基本元素间的连接关系。

步骤2:将bpmn工程模型转化为sd工程模型;

请见表1,是bpmn工程模型转sd工程模型的策略表格。

表1

本实施例中,步骤2的具体实现包括:

步骤2.1:参照图6,将步骤1.2中得到的bpmn工程模型中的泳池泳道转换得到sd中的参与者,即对于bpmn工程模型中的泳池与泳道,都一一对应转化得到sd中的一个参与者。

步骤2.2:参照图7,对于bpmn工程模型中的用户任务转换到sd中一条同步消息与一条返回消息,其中同步消息的发送者是该用户任务所在的泳道对应的参与者,接受者是该任务所在的泳池对应的参与者。返回消息的发送者是该任务所在的泳池对应的参与者,接受者是该用户任务所在的泳道对应的参与者。

步骤2.3:参照图8,对于bpmn工程模型中的手工任务转换到sd中的一条自关联消息,该自关联消息的发送者是该手工任务所在的泳道对应的参与者,接受者是该手工任务所在的泳道对应的参与者。

步骤2.4:参照图9、10,对于bpmn工程模型中的服务任务转换到sd中的消息。其中分为两种情况,当服务任务下一个节点处于同一泳道时,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是下一个节点所在的泳道对应的参与者。当服务任务下一节点处于同一泳道的时候,生成一条异步消息,发送者是该服务任务所在的泳道对应的参与者,接受者是该服务任务所在的泳池对应的参与者。

步骤2.5:参照图11,对于bpmn工程模型中的脚本任务转换到sd中的自关联消息,该自关联消息的发送者是该手工任务所在的泳池对应的参与者。接受者是该手工任务所在的泳池对应的参与者。

步骤2.6:参照图12,对于bpmn工程模型中的唯一网关转换到sd工程模型中的alt结构,并将后续任务转化放置到alt结构中对应的小分支内。

步骤2.7:参照图13,对于bpmn工程模型中的并行网关转换到sd工程模型中的par结构,并将后续任务转化放置到par结构中对应的小分支内。

步骤3:将步骤2中得到的sd工程模型转换为sd外部存储模型供设计人员后续根据需要自行修改,sd工程模型数据组织结构可参看图14,actor封装了时序图中的参与者,message封装了时序图中的消息,frames封装了时序图中的片段;

本实施例中,步骤3的具体实现包括以下子步骤:

步骤3.1:将步骤2.3中得到的sd工程模型转换为sd的json模型或sd的yaml模型,即将工程模型中的参与者与消息转换到json模型或者yaml模型中的参与者与消息。然后执行步骤3.2将生成的时序图以文件的形式进行导出保存方便后续操作或执行步骤3.3将生成的时序图以图片的形式进行导出方便后续展示使用。

步骤3.2:直接输出对应的sd的json模型或sd的yaml模型,设计人员获取到json模型或yaml模型之后能够在根据自己的需要进一步修改sd模型,从而更加细粒度的进行系统设计。sd的json的数据组织结构可参看图15,sd的yaml数据组织结构可参看图15,actorarray封装了时序图中的参与者,meaagearray封装了时序图中的消息,framearray封装了时序图中的片段,activitionarray封装了时序图中的激活期;sd的yaml的数据组织结构可参看图16,actors封装了时序图中的参与者,params封装了时序图中的消息的参数,lines封装了时序图中的消息。

步骤3.3:获取到3.2修改后的json文件或者yaml文件之后运用相应的sd底层绘制工具转换得到sd的png图片。

步骤4:运用转换规则分析sd工程模型进行微服务设计。

本实施例中,步骤4的具体实现包括以下子步骤:

步骤4.1:本发明也能够运用转换规则分析步骤2.3中得到的sd工程模型生成微服务代码工程模型,即对于每个参与者,会生成一个对应的微服务,然后将与该参与者关联的相关消息,如自关联消息、同步消息、异步消息转换生成该微服务下的一个api接口模型,消息上的参数对应转化到接口上的参数。协助设计人员进行微服务设计。

步骤4.2:根据微服务代码工程模型生成逻辑代码,每个微服务对应生成一个java文件,该微服务下的api接口模型会对应生成放置于该java文件内帮助开发人员进行开发。

步骤4.3:将逻辑代码打包,从而帮助简化开发人员的开发步骤,降低开发成本。

下面将进一步结合一个具体的案例对本发明的技术进行清楚、完整的描述。该实施例是美团用户的下单业务流程图,具体业务流程参看图11。整体流程步骤将分为以下步骤:

步骤1:读取bpmn原文件并解析包装,原文件是采用gojs标准存储的,读取解析后得到bpmngojs工程模型。

步骤2:运用实施例1中s102所叙解析转换规则将bpmngojs工程模型中的link以及node元素进行解析转换,得到bpmn工程模型。

步骤3:解析bpmn工程模型,按照实施例1中所叙转换策略进行转换。第一步运用步骤2.1中所叙转换规则解析bpmn中的泳池泳道转换成为参与者,即得到用户、支付平台、商家、骑手、美团系统五个参与者。第二步运用步骤2.2—步骤2.5所叙事件、任务转换规则将bpmn中的事件任务进行转换,得到sd中的所有消息流,转换得到的消息如图12所示。接着第三步就从开始节点往后解析,按照原bpmn的业务顺序给转换后的sd中的消息进行排序,保证sd中的时序顺序和原业务流程顺序的一致性。第四部就运用步骤2.6-步骤2.7中所述转换策略进一步解析原bpmn中的网关,即将图中的唯一网关转换为alt结构,图中的并行网关转换为par结构。最终得到sd工程模型,sd工程模型对应的sd图如图12所示。

步骤4:运用sd工程模型自动生成微服务设计方案,初步的微服务划分方案以及微服务需要提供的接口如表2所示,设计人员能够基于此初步设计进一步细化设计。

表2

应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1