一种状态机的实现方法及系统与流程

文档序号:14346975阅读:2202来源:国知局
一种状态机的实现方法及系统与流程

本发明涉及状态机技术领域,更具体地,涉及一种状态机的实现方法及系统。



背景技术:

在实际应用中经常会遇到一些具有状态走向的大型系统业务流程,如订单系统,一个订单具有创建、提交、待支付、已支付、已完成、已删除、处理中等等各种状态,不同状态根据不同的场景又有不同的走向。

在业务逻辑执行的过程中,在代码中需要编写很多if/else分支,程序代码非常混乱。同时,分支判断太多的代码也不易于理解,不易于维护,在对这些复杂业务流程处理非常繁琐。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的一种状态机的实现方法及系统,能够解决处理大型复杂业务流程中的繁琐、维护困难的问题。

根据本发明的一个方面,提供一种状态机的实现方法,包括:

将业务流程中涉及的所有状态定义为状态机的状态;

确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;

根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行所述对应的动作。

本发明的有益效果为:对于具有不同状态走向的复杂业务流程,使用状态机的特性,将业务流程的不同分支状态用可视化视图表现出来,简化了整个业务流程的复杂度,易于维护,避免了现有的一个业务流程中具有众多条件分析带来的复杂,使用状态机形成的可视化视图非常清晰明了。

在上述技术方案的基础上,本发明还可以作如下改进。

进一步的,在所述将业务流程中涉及的所有状态定义为状态机的状态之前还包括:

在spring框架中配置当前状态、条件和下一个状态、对应的动作之间的对应关系,形成对应关系表;

相应的,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:

根据确定出的状态机的当前状态以及输入的条件,在所述对应关系表中进行查询,确定出与当前状态以及输入条件对应的下一个状态和对应的动作。

进一步的,所述状态机包括初始状态和结束状态,所述方法还包括:

当所述当前状态为结束状态时,控制状态机停止跳转;以及,

所述根据确定出的状态机的当前状态以及输入的条件,在所述对应关系表中进行查询,确定出与当前状态以及输入条件对应的下一个状态和对应的动作还包括:

当根据状态机的当前状态以及输入的条件,在所述对应关系表中找不到相匹配的下一个状态和对应的动作,则控制状态机停止跳转。

进一步的,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:

将手动输入条件作为触发信号,根据该触发信号,确定状态机的当前状态,根据状态机的当前状态以及输入的条件,确定所述当前状态的下一个状态以及对应的动作。

进一步的,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:

根据状态机的当前状态以及当前状态、条件和下一个状态、对应的动作之间的对应关系,从状态机的当前状态开始,自动控制状态机按照执行顺序在不同的状态之间进行跳转,并执行跳转后对应的动作,直到状态机的当前状态为结束状态。

进一步的,所述对应的动作包括多个层级的子动作,所述根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行相应的动作具体包括:

根据确定出来的下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行相应动作下的全部子动作或者部分子动作。

进一步的,所述状态机可以为多个,多个状态机之间为继承关系,形成父状态机和子状态机,通过在子状态机中实现父状态机的业务流程。

根据本发明的另一个方面,提供了一种状态机的实现系统,包括:

定义模块,用于将业务流程中涉及的所有状态定义为状态机的状态;

确定模块,用于确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;

控制模块,用于根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行所述对应的动作。

根据本发明的再一个实施例,提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行状态机的实现方法。

附图说明

图1为本发明一个实施例的状态机的实现方法流程图;

图2为本发明另一个实施例的状态机的实现方法的整个过程示意图;

图3为本发明又一个实施例的状态机中各个状态之间流转的示意图;

图4为本发明再一个实施例的状态机的实现系统连接框图;

图5为本发明又一个实施例的状态机实现系统的整体连接框图;

图6为本发明一个实施例的状态机的实现方法的设备连接框图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

参见图1,提供了本发明一个实施例的状态机的实现方法,将复杂业务流程可视化,该方法包括:将业务流程中涉及的所有状态定义为状态机的状态;确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

在实际应用中经常会遇到一些具有状态走向的业务流程,如订单系统,一个订单具有创建、提交、待支付、已支付、已完成、已删除、处理中等等各种状态,不同状态根据不同的场景又有不同的走向。在对这些复杂业务流程处理非常繁琐,因此,本实施例引入状态机,利用状态机使得复杂业务流程转换为可视化视图,更加清晰明了。

具体过程为,根据业务流程的所有状态,为状态机定义业务流程的所有状态,每一个状态在不同的条件下会对应不同的下一个状态,以及执行不同的动作。在实现不同状态流转的过程中,首先需要确定状态机的当前状态,然后根据输入的条件,确定状态机的当前状态在输入的条件下对应的下一个状态以及对应需要执行的动作。根据确定出来的状态机的当前状态对应的下一个状态以及相应的动作,控制状态机从当前状态跳转到确定出来的下一个状态,并执行确定出来的相应动作。

在本发明的另一个实施例中,在所述将业务流程中涉及的所有状态定义为状态机的所有状态之前还包括:在spring框架中配置当前状态、条件和下一个状态、对应的动作之间的对应关系,形成对应关系表;相应的,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:根据确定出的状态机的当前状态以及输入的条件,在所述对应关系表中进行匹配,确定出与当前状态以及输入条件对应的下一个状态和对应的动作。

由于在控制状态机从当前状态跳转到另一个状态的过程中,需要确定当前状态在不同的条件下对应的下一个状态,在本实施例中,事先在spring框架下配置当前状态、条件和下一个状态、对应的动作之间的对应关系,形成对应关系表。比如,订单系统中一个订单待支付是一个状态,支付成功是一个条件,下一个状态对应为已支付,相应的动作为发短信告知用户支付成功。

在spring框架中配置好对应关系表之后,根据状态机的当前状态,以及根据输入的条件,确定当前状态的下一个状态以及对应的动作具体过程为,将状态机的当前状态和输入的条件在对应关系表中进行匹配,找到对应的下一个状态以及对应的动作。随后就可以控制状态机从当前状态跳转到下一个状态并执行相应的动作。

在本发明的一个实施例中,所述状态机包括初始状态和结束状态,所述的方法还包括:当所述当前状态为结束状态时,控制状态机停止跳转;以及,所述根据确定出的状态机的当前状态以及输入的条件,在所述对应关系表中进行匹配,得到与当前状态以及输入条件对应的下一个状态和对应的动作还包括:当根据状态机的当前状态以及输入的条件,在所述对应关系表中找不到相匹配的下一个状态和动作,则控制状态机停止跳转。

对于一个业务流程,都存在一个初始状态和一个结束状态,也作为状态机的初始状态和结束状态,由于业务流程具有初始状态和结束状态,因此,选择的状态机为有限状态机,其中,有限状态机(finite-statemachine,fsm),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

当根据状态机的当前状态以及条件确定出来的状态机的下一个状态为结束状态时,控制状态机跳转到该结束状态并执行对应的动作后,就结束流程。另外,当根据状态机的当前状态以及输入的条件,在对应关系表中找不到相匹配的下一个状态和动作,则表明匹配失败,则结束流程。

在本发明的另一个实施例中,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:将手动输入条件作为触发信号,根据该触发信号,确定状态机的当前状态,根据状态机的当前状态以及输入的条件,确定所述当前状态的下一个状态以及对应的动作。

在状态机的各个不同状态进行流转的过程中,可以采用手动触发,当手动输入条件时,将手动输入的条件作为触发信号,根据触发信号,确定状态机的当前状态,然后根据状态机的当前状态以及手动输入的条件,根据对应关系表确定状态机对应的下一个状态以及相应的动作。根据确定出来的下一个状态,控制状态机从当前状态跳转到下一个状态,当状态机跳转后,需要再次根据手动输入的条件,才能再次进行状态的跳转,即状态机每一次状态的跳转,均需要手动触发。

在本发明的一个实施例中,所述根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作具体包括:根据状态机的当前状态以及当前状态、条件和下一个状态、对应的动作之间的对应关系,从状态机的当前状态开始,自动控制状态机按照执行顺序在不同的状态之间进行跳转,并执行跳转后对应的动作,直到状态机的当前状态为结束状态。

前述实施例介绍了根据手动触发控制状态机在不同的状态之间进行流转,本实施例中介绍自动控制状态机在不同的状态之间进行跳转,首先确定状态机的当前状态以及预先配置的当前状态的不同条件,从当前状态开始,按照不同条件确定当前状态在不同条件下的下一个状态,并自动控制状态机从当前状态跳转到下一个状态,其中,条件不同,下一个状态不同。对于下一个状态,采用相同的方法再次按照顺序跳转到下一个状态的下一个状态,直到跳转到结束状态,完成所有状态之间的跳转流程。

本实施例是通过自动执行状态机的不同状态之间的跳转,即自动完成复杂业务流程,而前述实施例需要手动触发来执行,属于状态机实现的两种方式。

在本发明的一个实施例中,所述对应的动作包括多个层级的子动作,所述根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行相应的动作具体包括:根据确定出来的下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行相应动作下的全部子动作或者部分子动作。

每一个状态对应有相应的动作,在控制状态机从当前状态跳转到下一个状态时,执行该下一个状态对应的动作。其中,此处的动作可以为复合动作,即一个动作中可以包含多个层级的子动作,当根据确定出来的下一个状态,控制状态机从当前状态跳转至下一个状态时,执行该下一个状态对应的动作包含的全部子动作或者部分子动作。此处,执行全部的子动作或者执行部分子动作,可以在spring框架中进行配置,比如,根据不同的条件可以配置执行不同的子动作。

在本发明的另一个实施例中,所述状态机可以为多个,多个状态机之间为继承关系,形成父状态机和子状态机,通过在子状态机中实现父状态机的业务流程。

采用状态机将复杂业务流程转换为可视化视图时,使用的状态机可以为多个,多个状态机之间可以为继承关系,形成父状态机和子状态机,在子状态机中实现父状态机的业务流程,这样可以很方便地实现一个大业务中实现多个小业务的过程,具体实现时,可以为多个小业务分别配置一个对应的父状态机,然后为整个业务配置一个子状态机,子状态机继承父状态机,就能够在子状态机中实现多个父状态机的业务流程。

下面介绍一下采用状态机实现复杂业务流程的整个思想,可参见图3,业务流程中总共涉及到7个不同的状态,10个不同的条件,每一个状态具有对应的动作。结合图2和图3,每一个状态对应不同的条件,对应的下一个状态是不同的,因此,需要根据状态机的当前状态以及输入的相应条件来确定当前状态的下一个状态以及相应的动作,则控制状态机从当前状态跳转到下一个状态,并执行相应的动作。依次实现所有状态的跳转,直到跳转到状态机的结束状态。

参见图4,提供了本发明一个实施例的状态机的实现系统,包括定义模块41、确定模块42和控制模块43。

其中,定义模块41,用于将业务流程中涉及的所有状态定义为状态机的状态。

确定模块42,用于确定状态机的当前状态,以及根据输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作。

控制模块43,用于根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

参见图5,提供了本发明另一个实施例的状态机的实现系统,包括定义模块21、确定模块22、控制模块23和配置模块24。

其中,定义模块21,用于为状态机定义业务流程的状态。

确定模块22,用于确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作。

控制模块23,用于根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

配置模块24,用于在spring框架中配置当前状态、条件和下一个状态、对应的动作之间的对应关系,形成对应关系表。相应地,确定模块22,用于根据确定出的状态机的当前状态以及输入的条件,在所述对应关系表中进行匹配,确定出与当前状态以及输入条件对应的下一个状态和对应的动作。

其中,确定模块22,具体用于:将手动输入条件作为触发信号,根据该触发信号,确定状态机的当前状态,根据状态机的当前状态以及输入的条件,确定所述当前状态的下一个状态以及对应的动作。

前述的状态机包括初始状态和结束状态,控制模块23还用于:当所述当前状态为结束状态时,控制状态机停止跳转;以及,当根据状态机的当前状态以及输入的条件,在所述对应关系表中找不到相匹配的下一个状态和动作,则控制状态机停止跳转。

控制模块23,还用于:根据状态机的当前状态以及当前状态、条件和下一个状态、对应的动作之间的对应关系,从状态机的当前状态开始,自动控制状态机按照执行顺序在不同的状态之间进行跳转,并执行跳转后对应的动作,直到状态机的当前状态为结束状态。

前述的动作可以包括多个层级的子动作,控制模块23,还用于:根据确定出来的下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行相应动作下的全部子动作或者部分子动作。

参见图6,为本发明一个实施例的状态机的实现方法的设备,状态机的实现方法的设备包括:处理器(processor)601、存储器(memory)602和总线603;其中,所述处理器601和存储器602通过所述总线603完成相互间的通信。

所述处理器601用于调用所述存储器602中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:将业务流程中涉及的所有状态定义为状态机的所有状态;确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述对应实施例所提供的直播中防止刷人气行为的方法,例如包括:将业务流程中涉及的所有状态定义为状态机的所有状态;确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述对应实施例所提供的直播中防止刷人气行为的方法,例如包括:将业务流程中涉及的所有状态定义为状态机的所有状态;确定状态机的当前状态,根据状态机的当前状态和输入的条件,确定所述当前状态在所述条件下的下一个状态以及对应的动作;根据确定出来的所述下一个状态,控制状态机从所述当前状态跳转至所述下一个状态,并执行对应的动作。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的状态机的实现方法的设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

本发明提供一种状态机的实现方法及系统,使用状态机的特性,将业务流程的不同分支状态用可视化视图表现出来,简化了整个业务流程的复杂度,易于维护,避免了现有的一个业务流程中具有众多条件分析带来的复杂,使用状态机形成的可视化视图非常清晰明了。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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