一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种应用于交易领域的基于状态机的事件驱动方法和系统与流程

2021-11-09 22:28:00 来源:中国专利 TAG:


1.本发明涉及本发明涉及应用于交易领域的基于状态机的事件驱动方法和系统。


背景技术:

2.交易系统是指提供人机交互界面或具备独立智能决策及下达交易指令功能的,以交易指令传输网络为通道,以及以计算机为载体的信息系统。现有的交易系统主要包括以下几种类型:趋势跟随交易系统、反趋势交易系统、突破交易系统、价格区间交易系统、对冲系统。
3.现有的交易系统主要存在两方面的不足:
4.一是基于业务流程来设计,将流程固化在系统代码中,并通过定时任务来进行触发,不利于业务流程的变更,缺乏纵向的扩展性。
5.二是没有考虑各业务品种间的横向扩展性,即业务产品要素与业务处理流程没有进行有效分离,纳入新业务品种不够灵活。


技术实现要素:

6.为了克服现有技术中交易系统缺乏横向扩展性和纵向扩展性的技术缺陷,本发明的第一个方面提供一种应用于交易领域的基于状态机的事件驱动方法,所述事件驱动方法包括以下步骤:
7.步骤s1:在接收客户端或第一服务端发送的针对一交易的确认交易指令后,实例模块生成所述交易的实例,并更新交易状态为第一交易状态,并将所述第一交易状态发送至任务模块,并分配交易编号以识别所述交易;
8.步骤s2:任务模块获取完成所述交易时需要执行的所有事件及其包含的所有任务;
9.步骤s3:任务模块确定从所述第一交易状态进入第二交易状态所需执行的唯一第一当前事件及其包含的所有第一当前任务,并将所述的所有第一当前任务分配给实例模块;
10.步骤s4:实例模块接收到所述的所有第一当前任务后,将所述的所有第一当前任务转发给策略模块进行处理;
11.步骤s5:策略模块处理所述的所有第一当前任务,并将处理结果反馈给实例模块;
12.步骤s6:实例模块根据处理结果更新交易状态为第二交易状态,并将所述第二交易状态发送至任务模块;以及
13.步骤s7:依次重复执行步骤s3至步骤s6,直至完成所述交易时需要执行的所有事件包含的所有任务都得到执行之后,实例模块对所述实例进行持久化操作;
14.所述实例模块、所述任务模块和所述策略模块部署于第二服务端。示例地,在步骤s7中,任务模块确定从所述第二交易状态进入第三交易状态所需执行的唯一第二当前事件及其包含的所有第二当前任务,然后类推地,依次重复执行步骤s4至步骤s6。
15.在本技术的技术方案中,第二服务端通过抽象类的设计和领域建模来实现本技术的应用于交易领域的基于状态机的事件驱动方法。客户端(或第一服务端)与第二服务端与之间进行数据通信,例如,客户端(或第一服务端)向第二服务端发送针对某一笔交易的确认交易指令,第二服务端接收该笔交易的确认交易指令,等等。
16.本技术中的“交易”包括但不限于存款、贷款、票据、债券、外汇等业务品种的交易活动。
17.进一步地,在步骤s1之前进一步包括步骤:基于状态机和领域模型设计并编码生成一事件驱动系统,所述领域模型抽象出交易领域对象,所述事件驱动系统包括所述实例模块、所述任务模块和所述策略模块,所述实例模块、所述任务模块和所述策略模块共同围绕交易领域对象的状态并按照状态机驱动交易领域的事件执行。
18.本技术中的“交易领域对象”是指针对交易处理环节中的关键事物及其关系的可视化表现,为准确定义交易活动而构造的对象。
19.本技术中的“状态机”不是指一台实际机器,而是指一个数学模型,一般就是指一张状态转换图(即状态机图)。一个状态机至少要包含两个状态。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态就可以明确的运算出来。进程的状态就是按照状态图进行切换的,业务流程围绕某个事物的状态变化进行。一般情况下,使用有限状态机。状态机可以对业务状态进行梳理,一目了然,之后可以根据业务场景不断增加。
20.本技术中的“领域模型”是指对交易领域内的概念类或现实世界中对象的可视化表示,又称概念模型、领域对象模型、分析对象模型。具体地,按照本领域惯用的领域驱动设计(ddd)的设计思路,将交易领域的领域对象及领域事件进行封装,并通过领域服务层对外提供领域对象操作的接口来触发领域对象生命周期的管理,在设计中,充分考虑了各业务品种交易对象在交易流程上相似性,利用“充血模型”,抽象出共性的要素、共性的方法组成抽象类,如抽象出存款交易类,再利用java的多态,在运行时实例具体的对象,如是活期、还是定期、亦或是通知存款。
21.本技术中的事件包括但不限于要素检查、交易类型判断、结算方式判断、交易金额判断、交易时效判断、风控检查,业务确认等。
22.进一步地,所述实例模块定义具体的领域对象以及领域服务,提供对外接口以触发领域对象的创建;任务模块实现领域事件和领域流程的可配置化,包含任务控制、事件控制以及事件配置三项基本配置,并通过领域对象的状态驱动领域事件执行;策略模块定义了所有领域事件的实现方法,是一个集中管理的策略仓库,集中管理各个业务品种的公用方法和个性方法;实例模块从策略模块获取领域事件执行的方法,再调用任务模块执行该方法,从而改变领域对象的状态,最后完成持久化。
23.进一步地,所述任务模块包括策略库、任务配置库和任务流程控制库,策略库确定所述领域对象当前执行事件的所有子任务,所述任务配置库确定所述领域对象在某一状态下需要执行的事件或任务,任务流程控制库提供以状态为驱动的流程控制。在步骤s4中,所述实例模块根据所有第一当前任务中包含的策略号和领域对象要素将所述的所有第一当前任务转发给策略模块进行处理。
24.所述领域对象要素包括交易指令编号、交易时间、交易类型、结算方式、交易金额、客户号、客户姓名和客户账户号等。
25.进一步地,所述实例模块包括实例库,所述实例库中含有不同交易业务种类对应的实例。
26.优选地,所述实例模块、所述任务模块和所述策略模块分别部署于同一第二服务端或者不同的第二服务端。
27.本发明的第二个方面提供一种应用于交易领域的基于状态机的事件驱动系统,所述事件驱动系统包括实例模块、任务模块和策略模块,
28.所述实例模块用于在接收客户端或第一服务端发送的针对一交易的确认交易指令后,生成所述交易的实例,并分配交易编号以识别所述交易;还用于更新交易状态为第一交易状态,并将所述第一交易状态发送至任务模块;还用于接收任务模块分配的所述的所有第一当前任务后,将所述的所有第一当前任务转发给策略模块进行处理;还用于根据策略模块的处理结果更新交易状态为第二交易状态,并将所述第二交易状态发送至任务模块;以及,还用于当完成所述交易时需要执行的所有事件包含的所有任务都得到执行之后,对所述实例进行持久化操作;
29.所述任务模块用于获取完成所述交易时需要执行的所有事件及其包含的所有任务;还用于确定从所述第一交易状态进入第二交易状态所需执行的唯一第一当前事件及其包含的所有第一当前任务;以及,还用于将所述的所有第一当前任务分配给实例模块;
30.所述策略模块用于处理实例模块转发的所述的所有第一当前任务,并将处理结果反馈给实例模块;
31.所述事件驱动系统的所述实例模块、所述任务模块和所述策略模块部署于第二服务端。
32.进一步地,所述事件驱动系统是基于状态机和领域模型设计并编码生成的,所述领域模型用于抽象出交易领域对象,所述事件驱动系统包括所述实例模块、所述任务模块和所述策略模块,所述实例模块、所述任务模块和所述策略模块用于共同围绕领域对象的状态并按照状态机驱动交易领域的事件执行。
33.本技术中的事件包括但不限于要素检查、交易类型判断、结算方式判断、交易金额判断、交易时效判断、风控检查,业务确认等。
34.进一步地,所述实例模块用于定义具体的领域对象以及领域服务,提供对外接口以触发交易领域对象的创建;任务模块用于实现领域事件和领域流程的可配置化,包含任务控制、事件控制以及事件配置三项基本配置,通过状态驱动领域事件执行;策略模块用于定义所有领域事件的实现方法,是一个集中管理的策略仓库,集中管理各个业务品种的公用方法和个性方法;实例模块用于从策略模块获取领域事件执行的方法,再调用任务模块执行该方法,从而改变领域对象的状态,最后完成持久化。
35.进一步地,所述任务模块包括策略库、任务配置库和任务流程控制库,策略库用于确定所述领域对象当前执行事件的所有子任务,所述任务配置库用于确定所述领域对象在某一状态下需要执行的事件或任务,任务流程控制库用于提供以状态为驱动的流程控制。所述实例模块还用于根据所有第一当前任务中包含的策略号和领域对象要素将所述的所有第一当前任务转发给策略模块进行处理。
36.进一步地,所述领域对象要素包括交易指令编号、交易时间、交易类型、结算方式、交易金额、客户号、客户姓名和客户账户号等。
37.进一步地,所述实例模块包括实例库,所述实例库中含有不同交易业务种类对应的实例。
38.进一步地,所述实例模块、所述任务模块和所述策略模块分别部署于同一第二服务端或者不同第二服务端。示例地,所述实例模块、所述任务模块和所述策略模块均部署于同一个第二服务端;或者,示例地,所述实例模块部署于一个第二服务端,而所述任务模块和所述策略模块共同部署于另一第二服务端;或者,示例地,所述实例模块、所述任务模块和所述策略模块分别部署于三个不同的第二服务端,等等。
39.采用了上述技术方案后,与现有技术相比,具有以下有益效果:
40.1.交易领域有其复杂性,例如交易处理环节和交易状态特别多,现有技术中都是基于业务流程来设计交易系统,将业务流程固化在系统代码中,并通过定时任务来进行触发,不利于业务流程的变更,缺乏纵向的扩展性。本技术将领域模型应用于交易领域,本技术的应用于交易领域的基于状态机的事件驱动系统基于交易状态驱动事件执行,即将状态变化与事件执行结合在一起,即通过当前状态下执行某一事件,根据执行结果进行到下一状态,依次重复进行。对于某一业务品种而言,其业务流程能够随意变换,业务流程不再固化于系统代码中,因此,本技术的应用于交易领域的基于状态机的事件驱动系统具有纵向扩展性。
41.2.现有技术中的交易系统的业务产品要素与业务处理流程耦合,纳入新业务品种不够灵活,没有考虑各个业务品种之间的横向扩展性。而本技术中的应用于交易领域的基于状态机的事件驱动系统通过实例模块、任务模块和策略模块将任务流程、领域对象以及任务执行充分解耦,使各个模块的职责更加清晰,同时也具有良好的横向及纵向扩展能力。具体地,实例模块专注于领域对象的建模、领域对象的有限状态机、定义领域服务、对外暴露领域服务接口,不仅能支持现有各个业务品种的交易(如:存款、贷款、票据、债券、外汇等),还通过抽象的方式将领域状态变化与具体的业务交易要素剥离,也解决了未来纳入更多业务品种的要求,具有横向扩展性。同时,随着业务量的增长,由于实例模块本身不具有状态性,可以对业务进行横向拆分,通过添加服务器的方式来进行横向扩展。任务模块通过配置化的方式,可以较为灵活的支持不同业务品种、业务产品在交易处理上的差异化要求,同时也为增减不同的策略提供了纵向扩展能力。未来也可引入多版本管理来支持海外不同地区的业务要求。
附图说明
42.图1为本技术一实施例的交易状态机原理示意图;
43.图2为本技术一实施例的结合具体实施例的交易状态机图;
44.图3为客户端和第一服务端与部署有事件驱动系统的第二服务端之间的通信关系示意图;
45.图4为本技术的应用于交易领域的基于状态机的事件驱动方法的流程图。
具体实施方式
46.以下结合附图与具体实施例进一步阐述本发明的优点。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本发明的保护范围。
47.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
48.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
49.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一服务端也可以被称为第二服务端,类似地,第二服务端也可以被称为第一服务端。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
50.实施例
51.一、以状态机图为设计依据,设计并生成本技术的应用于交易领域的事件驱动系统
52.(1)状态驱动设计:状态机,也就是state machine,不是指一台实际机器,而是指一个数学模型,一般就是指一张状态转换图。一个状态机至少要包含两个状态。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态就可以明确的运算出来。进程的状态就是按照状态图进行切换的,业务流程围绕某个事物的状态变化进行。一般情况下,使用有限状态机。状态机可以对业务状态进行梳理,一目了然,之后可以根据业务场景不断增加。
53.如图1所示为本技术一实施例的交易状态机原理示意图,图中以不同的交易状态作为节点。由图可知,事件执行与状态变化结合在一起,即通过当前状态下执行某一事件,根据执行结果进行到下一状态,依次重复进行。事件就是执行某个操作的触发条件或者口令,事件发生以后要执行任务。设计中运用状态机图作为主要设计依据,来标识一个实体从初态到终态的一系列变化。两个状态通过有向箭头连接,标识前一个状态可到达后一个状态,有向箭头上的文字代表触发该状态变化的事件及该事件执行的结果。状态转移图上的所有状态及事件不仅说明了状态的迁徙过程是一个有限的状态变化过程,也表明了事件所需执行必须满足的状态。
54.示例地,图2所示为本技术一结合具体实施例的交易状态机图。
55.示例地,在编码过程中对状态机图上这些关键信息进行配置时,采用如表1至表3的数据结构:
56.表1配置任务流程控制库时采用的交易任务的流程控制结构
[0057][0058]
表2配置任务配置库时采用的任务和事件的控制结构
[0059][0060][0061]
表3配置策略库时采用的事件配置设计结构
[0062][0063]
对于领域事件,还可以定义具体执行的方法以及该方法使用到的参数(即按照领域已完成定义的领域对象要素),也可支持多个子任务,按照一定执行顺序的配置。
[0064]
(2)领域对象设计:按照领域驱动设计(ddd)的思路,将领域对象及领域事件进行封装,并通过领域服务层对外提供领域对象操作的接口来触发领域对象生命周期的管理。在设计中,充分考虑各业务品种交易对象在交易流程上相似性,利用“充血模型”,抽象出共性的要素、共性的方法组成抽象类,如抽象出存款交易类,再利用java的多态,在运行时实例具体的对象,如是活期、还是定期、亦或是通知存款等。
[0065]
示例地,在配置交易领域对象的抽象类中包含的要素时,采用如表4所示的数据结构实现:
[0066]
表4在抽象类中包含的要素的某个数据结构
[0067][0068]
其中,数据状态字段用于状态机变化的状态字段,该字段内容需与状态转移图状态一致。
[0069]
通过上述过程即可得到本技术的应用于交易领域的基于状态机的事件驱动系统,该事件驱动系统从功能上来说可以划分为三个模块。当该事件驱动系统的程序代码被执行时,就实现了本技术的应用于交易领域的基于状态机的事件驱动方法,从而实现各个交易业务品种内部的事件执行以及不同交易业务品种之间的事件执行。本技术的应用于交易领域的基于状态机的事件驱动系统通过将任务流程、领域对象以及任务执行充分解耦,使各模块的职责更加清晰,同时也具有良好的横向及纵向扩展能力。
[0070]
其中,实例模块:按照ddd的设计思想,定义了具体的领域对象以及领域服务,通过对外提供接口,触发领域对象的创建,从策略模块获取领域事件执行的方法,再调用任务模块执行该方法,从而改变领域对象的状态,最终完成持久化等一系列操作。实例模块专注于领域对象的建模、领域对象的有限状态机、定义领域服务、对外暴露领域服务接口,不仅能支持现有各个业务品种的交易(如:存款、贷款、票据、债券、外汇等),还通过抽象的方式将领域状态变化与具体的业务交易要素剥离,也解决了未来纳入更多业务品种的要求,具有一定的横向扩展性。同时,随着业务量的增长,由于实例模块本身不具有状态性,可以对业务进行横向拆分,通过添加服务器的方式来进行横向扩展。
[0071]
其中,任务模块:实现领域事件、领域流程的可配置化,通过状态驱动领域事件执行。包含任务控制、事件控制以及事件配置三项基本配置,从而使开发人员可以根据业务的不同要求进行灵活配置。通过配置化的方式,可以较为灵活的支持不同业务品种、业务产品在交易处理上的差异化要求,同时也为增减不同的策略提供了纵向扩展能力。未来也可引入多版本管理来支持海外不同地区的业务要求。
[0072]
其中,策略模块:定义了所有领域事件的实现方法,是一个集中管理的策略仓库,使得各个业务品种的公用方法、个性方法得到集中的管理。通过执行这些方法得到的运行结果,可用来判断领域状态的变化。
[0073]
二、本技术的交易领域的事件驱动系统的实际应用
[0074]
如图3所示,本技术的应用于交易领域的基于状态机的事件驱动系统部署于第二服务端,该事件驱动系统包括实例模块、任务模块和策略模块。客户端(或第一服务端)与第二服务端之间进行数据通信。当该事件驱动系统的程序代码被执行时,就实现了本技术的应用于交易领域的基于状态机的事件驱动方法,从而实现各个交易业务品种内部的事件执行以及不同交易业务品种之间的事件执行。
[0075]
如图2和4所示,应用于交易领域的基于状态机的事件驱动方法包括以下步骤:
[0076]
步骤s1:在接收客户端或第一服务端发送的针对一交易的确认交易指令后,实例模块生成所述交易的实例,并更新交易状态为第一交易状态(即初始状态),并将所述第一交易状态发送至任务模块。
[0077]
步骤s2:任务模块获取完成所述交易时需要执行的所有事件及其包含的所有任务。
[0078]
具体地,任务模块获取完成所述交易时需要执行的所有事件及其包含的所有任务,例如,所有事件为:去重(即预判是否为重复的交易指令)、预检查通过、购买交易、提现交易、充值交易、实时时效、隔日时效。
[0079]
步骤s3:任务模块确定从所述第一交易状态进入第二交易状态所需执行的唯一第一当前事件及其包含的所有第一当前任务,并将所述的所有第一当前任务分配给实例模块。
[0080]
具体地,任务模块确定从所述第一交易状态进入第二交易状态所需执行的当前事件为“去重”,并将“去重”对应的所有第一当前任务分配给实例模块。
[0081]
步骤s4:实例模块接收到所述的所有第一当前任务后,将所述的所有第一当前任务转发给策略模块进行处理。
[0082]
具体地,实例模块接收到“去重”对应的所有第一当前任务后,将所述的所有第一当前任务转发给策略模块进行处理。
[0083]
步骤s5:策略模块处理“去重”对应的所有第一当前任务,并将处理结果反馈给实例模块。
[0084]
步骤s6:实例模块根据处理结果更新交易状态为第二交易状态,并将所述第二交易状态发送至任务模块。以及
[0085]
步骤s7:依次重复执行步骤s3至步骤s6,直至完成所述交易时需要执行的所有事件包含的所有任务都得到执行之后,交易状态就更新为最终交易状态(即终态),实例模块对所述实例进行持久化操作。
[0086]
对于从第二交易状态开始至最终交易状态(即终态)之间的交易状态而言,每两个相邻的交易状态的更新都需要执行一遍步骤s3至步骤s6。
[0087]
示例地,首先,任务模块执行步骤s3以确定从所述第二交易状态进入第三交易状态所需执行的当前事件为“预检查通过”,并将“预检查通过”对应的所有第二当前任务分配给实例模块。然后类推地,依次重复执行步骤s4至步骤s6。
[0088]
其次,(1)任务模块确定从所述第三交易状态进入第四交易状态所需执行的当前事件为“购买交易”,并将“购买交易”对应的所有当前任务分配给实例模块,然后类推地,依次重复执行步骤s4至步骤s6,因为第四交易状态为终态,故已经执行完成了该交易需要执行的所有事件包含的所有任务,实例模块对所述实例进行持久化操作;
[0089]
或者,(2)任务模块确定从所述第三交易状态进入第五交易状态所需执行的当前事件为“充值交易”,并将“充值交易”对应的所有当前任务分配给实例模块,然后类推地,依次重复执行步骤s4至步骤s6;然后,进一步地,

任务模块确定从所述第五交易状态进入第七交易状态所需执行的当前事件为“实时”,并将“实时”对应的所有当前任务分配给实例模块,然后类推地,依次重复执行步骤s4至步骤s6,因为第七交易状态为终态,故已经执行完成了该交易需要执行的所有事件包含的所有任务,实例模块对所述实例进行持久化操作;或者,

任务模块确定从所述第五交易状态进入第八交易状态所需执行的当前事件为“隔日”,并将“隔日”对应的所有当前任务分配给实例模块,然后类推地,依次重复执行步骤s4至步骤s6,因为第八交易状态为终态,故已经执行完成了该交易需要执行的所有事件包含的所有任务,实例模块对所述实例进行持久化操作;
[0090]
或者,(3)任务模块确定从所述第三交易状态进入第六交易状态所需执行的当前事件为“提现交易”,并将“提现交易”对应的所有当前任务分配给实例模块,然后类推地,依次重复执行步骤s4至步骤s6,因为第六交易状态为终态,故已经执行完成了该交易需要执行的所有事件包含的所有任务,实例模块对所述实例进行持久化操作。
[0091]
本领域技术人员应当理解,本技术具体实施方式中的图1和图2仅是为了便于理解本发明的技术方案而进行的某一种实施方式的举例,由于交易领域的交易业务品种及其流程具有多样性和冗长性,由于篇幅限制,此处无法穷尽所有交易业务品种并穷尽某一业务品种下的全部完整的交易流程,但是不影响本领域技术人员对本技术技术方案的理解和实施。
[0092]
综上,本技术中的应用于交易领域的基于状态机的事件驱动系统通过实例模块、任务模块和策略模块将任务流程、领域对象以及任务执行充分解耦,使各个模块的职责更加清晰,同时也具有良好的横向及纵向扩展能力。
[0093]
应当注意的是,本发明的实施例有较佳的实施性,且并非对本发明作任何形式的限制,任何熟悉该领域的技术人员可能利用上述揭示的技术内容变更或修饰为等同的有效实施例,但凡未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何修改或等同变化及修饰,均仍属于本发明技术方案的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献