CN103019695B - 数据对象与状态控制逻辑分离***和方法 - Google Patents
数据对象与状态控制逻辑分离***和方法 Download PDFInfo
- Publication number
- CN103019695B CN103019695B CN201210479553.0A CN201210479553A CN103019695B CN 103019695 B CN103019695 B CN 103019695B CN 201210479553 A CN201210479553 A CN 201210479553A CN 103019695 B CN103019695 B CN 103019695B
- Authority
- CN
- China
- Prior art keywords
- state
- data object
- activity
- status
- supervisor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种数据对象与状态控制逻辑分离***,包括:关联单元,将数据对象与状态管理器中的状态数据通过绑定进行关联,状态数据包括状态类型以及对应于状态类型的控制逻辑;状态管理器,在将针对数据对象执行活动时,根据与活动的当前状态对应的控制逻辑,判断活动是否允许被执行,以及在接收到执行单元的通知时,将数据对象的原状态切换至目标状态,在状态管理器切换数据对象的状态后,更新数据对象的状态属性;执行单元,在判断出活动允许被执行时,执行活动,并在活动被执行结束后,向状态管理器发送通知。本发明还提供了一种数据对象与状态控制逻辑分离方法。通过本发明可实现数据对应于状态控制逻辑的分离,提高设计和运行的灵活性。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种数据对象与状态控制逻辑分离***和一种数据对象与状态控制逻辑分离方法。
背景技术
在数据处理流程和功能快速变化且持续改进的情况下,用户期待在保持数据对象不变的情况下,支持更丰富的更灵活的控制逻辑实现,目前通用的实现方法有以下共同的特性:
1.使用枚举类型描述状态元数据;
2.在设计态定义数据对象所引用的状态数据;
3.通过设计态定义每种状态的控制逻辑代码,控制针对数据对象的活动操作是否可执行;
4.通过状态机等手段定义针对数据对象的活动触发的数据对象的状态变更;
5.数据对象元数据和状态控制逻辑代码,以及状态机在编译时进行关联,数据对象元数据和状态控制逻辑代码,以及状态机一般需要确定明确的对应关系。
从上述特点中可以看出,相关技术虽然在一定程度上实现了数据对象和业务逻辑的分离,提高了开发效率和用户体验。但由于依赖代码实现控制逻辑,这些技术仍存在以下一些不足:
1.数据对象和控制逻辑编程的并行开展存在限制。因为数据对象及其活动的控制逻辑依赖状态的代码在数据对象的活动开发时需要硬代码在活动内部写好,导致数据对象的活动的逻辑代码和状态元素紧密耦合,编写数据对象业务逻辑代码时,必须明确状态的控制规则,从而编写逻辑代码;而状态控制逻辑的更改,通常也需要同步修改代码文件来实现,不能很好地达到支持数据对象的控制逻辑与状态控制逻辑分离,并行实现,不产生相互影响的目的。
2.在企业管理软件中,经常会有根据不同用户定义不同的状态,状态控制逻辑和转换逻辑,现有技术在运行期间,不能很好地支持状态控制逻辑的扩展。
因此,需要一种新的数据对象与状态控制逻辑分离技术,不需要修改数据对象及其活动的逻辑代码,就可实现数据对象和活动与控制逻辑相分离的目的。
发明内容
本发明正是基于上述问题,提出了一种新的数据对象与状态控制逻辑分离技术,不需要修改数据对象及其活动的逻辑代码,就可实现数据对象和活动与控制逻辑相分离的目的。
有鉴于此,根据本发明的一个方面,提供了一种数据对象与状态控制逻辑分离***,包括:关联单元,将所述数据对象与状态管理器中的状态数据通过绑定进行关联,所述状态数据包括状态类型以及对应于所述状态类型的控制逻辑,由状态管理器管理所述状态数据;所述状态管理器,在将针对所述数据对象执行活动时,读取所述数据对象的当前状态,根据与所述当前状态对应的控制逻辑,判断所述活动是否允许被执行,以及在接收到来自执行单元的通知时,基于所述状态数据将所述数据对象的原状态切换至目标状态,在所述状态管理器切换所述数据对象的状态后,将所述目标状态的值传送至所述数据对象,以更新所述数据对象的状态属性;所述执行单元,在判断出所述活动允许被执行时,执行所述活动,并在所述活动被执行结束后,向所述状态管理器发送通知。
通过数据绑定为数据对象和状态数据之间提供数据同步的交互途径。在数据对象元数据中指定绑定源和绑定路径,元数据被加载并创建为数据对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
在上述技术方案中,优选的,所述执行单元还用于在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,以及在所述活动被执行结束后,发出活动完成事件;所述状态管理器还用于监听所述事件,并调用状态校验方法判断所述活动是否允许被执行,以及监听所述活动完成事件,调用状态转换方法执行状态转换过程。
在上述技术方案中,优选的,所述状态管理器还用于按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件;所述执行单元在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件对所述活动进行校验,在校验通过时,执行所述活动,在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
在上述技术方案中,优选的,所述执行单元还用于在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器的状态校验方法,在校验通过时,执行所述活动,以及在所述活动执行结束时,调用所述状态管理器的状态切换方法,执行状态切换。
因此,通过上述技术方案,在实现状态管理器的基础上,数据处理通过事件处理或插件机制或服务调用,将数据对象和状态管理器建立逻辑关联。在执行活动时,自动获取数据对象的当前状态值,执行前通知状态管理器校验活动是否可执行,活动执行完成后通知状态管理器切换当前状态,状态管理器切换当前状态后,绑定机制通知数据对象状态已更改,并自动传送最新状态值,然后刷新数据对象的状态属性。
在上述任一技术方案中,优选的,所述状态管理还用于在接收到更新请求时,根据所述更新请求扩展、修改和/或新建所管理的状态数据。
状态管理器中的状态集合、状态控制项集合和状态转换控制项集合支持根据实际需要在运行时动态扩展和修改或新建,以支持实际流程对于状态的灵活配置。
根据本发明的另一方面,还提供了一种数据对象与状态控制逻辑分离方法,包括:步骤802,将所述数据对象与状态数据通过绑定进行关联,所述状态数据包括状态类型以及对应于所述状态类型的控制逻辑,由状态管理器管理所述状态数据;步骤804,在将针对所述数据对象执行活动时,所述状态管理器管理读取所述数据对象的当前状态,根据与所述当前状态对应的控制逻辑,判断所述活动是否允许被执行;步骤806,在判断出所述活动允许被执行时,执行所述活动,并在所述活动被执行结束后,通知所述状态管理器基于所述状态数据将所述数据对象的原状态切换至目标状态;步骤808,在所述状态管理器切换所述数据对象的状态后,将所述目标状态的值传送至所述数据对象,以更新所述数据对象的状态属性。
通过数据绑定为数据对象和状态数据之间提供数据同步的交互途径。在数据对象元数据中指定绑定源和绑定路径,元数据被加载并创建为数据对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
在上述技术方案中,优选的,所述步骤804具体包括:在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,所述状态管理器监听所述事件,并调用状态校验方法判断所述活动是否允许被执行;所述步骤806具体包括:在所述活动被执行结束后,发出活动完成事件,所述状态管理器监听所述活动完成事件,调用状态转换方法执行状态转换过程。
在上述技术方案中,优选的,所述步骤804具体包括:所述状态管理器按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件,在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件,在校验通过时,执行所述活动;所述步骤806具体包括:在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
在上述技术方案中,优选的,所述步骤804具体包括:在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器的状态校验方法,在校验通过时,执行所述活动;所述步骤808具体包括:在所述活动执行结束时,调用所述状态管理器的状态切换方法,执行状态切换。
因此,通过上述技术方案,在实现状态管理器的基础上,数据处理通过事件处理或插件机制或服务调用,将数据对象和状态管理器建立逻辑关联。在执行活动时,自动获取数据对象的当前状态值,执行前通知状态管理器校验活动是否可执行,活动执行完成后通知状态管理器切换当前状态,状态管理器切换当前状态后,绑定机制通知数据对象状态已更改,并自动传送最新状态值,然后刷新数据对象的状态属性。
在上述任一技术方案中,优选的,在接收到更新请求时,所述状态管理器根据所述更新请求扩展、修改和/或新建所管理的状态数据。
状态管理器中的状态集合、状态控制项集合和状态转换控制项集合支持根据实际需要在运行时动态扩展和修改或新建,以支持实际流程对于状态的灵活配置。
根据本发明的技术方案使用数据绑定、状态处理、数据处理技术在设计时和运行时都拆分了数据对象和状态控制逻辑之间的依赖耦合关系,支持在设计态和运行态根据实际需要扩展,修改或新建状态及其控制逻辑,而不需要修改数据对象及其活动的逻辑代码,实现了数据对象和活动与控制逻辑相分离的目的。
附图说明
图1A示出了相关技术中数据对象处理的原理示意图;
图1B示出了相关技术中程序模块设计和运行期间表现示意图;
图2示出了根据本发明的实施例的数据对象与状态控制逻辑分离***的框图;
图3示出了根据本发明的数据对象与状态控制逻辑分离***的实现原理图;
图4示出了根据本发明的实施例的状态管理器的实现框图;
图5示出了根据本发明的实施例的数据处理的事件处理机制原理图;
图6示出了根据本发明的实施例的数据处理的插件机制原理图;
图7示出了根据本发明的实施例的数据处理的方法调用机制原理图;
图8示出了根据本发明的实施例的数据对象与状态控制逻辑分离方法的流程图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
在说明根据本发明的数据对象与状态控制逻辑分离原理之前,首先结合图1A和图1B说明相关技术。
图1A示出了相关技术中数据对象处理的原理示意图,图1B示出了相关技术中程序模块设计和运行期间表现示意图。
通常情况下,软件的某个功能模块包括该业务数据,逻辑操作,以及用户界面(UI)。其中,业务数据是功能模块要处理或生成的数据对象,逻辑操作是对业务数据的处理过程和方法,用户界面向用户呈现业务数据,并负责把用户的操作映射为逻辑操作,并把操作的结果反馈给用户。
如图1A所示,当用户执行特定的活动,比如修改或删除数据对象时,对应的活动接收要处理的数据对象,读取数据对象,包括数据的状态,执行状态控制的逻辑硬代码,验证通过,执行其它逻辑,从而完成对用户操作指令做出相应的业务逻辑操作。
现有技术一般通过数据处理完成数据对象的活动处理与业务数据(包括状态数据)处理模块间的交互,其中处理状态控制的逻辑硬代码编写在数据对象的活动处理实现中。
根据现有技术的特性,程序模块设计和运行期间表现如图1B所示,在设计和运行时,数据对象活动的逻辑和状态控制逻辑被包装在同一个活动处理的程序对象中,这个程序对象既包含数据对象活动的逻辑,又包含状态控制逻辑。不论是在设计时还是在运行时,数据对象活动的逻辑和状态控制逻辑都有完全耦合关系,也使设计时并行开发、运行时动态扩展和替换状态控制逻辑等需求难以实现。
名词解释:活动:一组为了实现特定目的的数据操作的集合,其中对于操作自身的完整的处理逻辑,操作之间在逻辑上是独立的,在活动内部的操作之间具有复杂的逻辑上的执行顺序的组合关系,包括先后顺序执行、并行执行、选择执行等关系。
图2示出了根据本发明的实施例的数据对象与状态控制逻辑分离***的框图。
如图2所示,根据本发明的实施例的数据对象与状态控制逻辑分离***200,包括:关联单元202,将所述数据对象与状态管理器中的状态数据通过绑定进行关联,所述状态数据包括状态类型以及对应于所述状态类型的控制逻辑,由状态管理器204管理所述状态数据;所述状态管理器204,在将针对所述数据对象执行活动时,读取所述数据对象的当前状态,根据与所述当前状态对应的控制逻辑,判断所述活动是否允许被执行,以及在接收到来自执行单元206的通知时,基于所述状态数据将所述数据对象的原状态切换至目标状态,在所述状态管理器204切换所述数据对象的状态后,将所述目标状态的值传送至所述数据对象,以更新所述数据对象的状态属性;所述执行单元206,在判断出所述活动允许被执行时,执行所述活动,并在所述活动被执行结束后,向所述状态管理器204发送通知。
通过数据绑定为数据对象和状态数据之间提供数据同步的交互途径。在数据对象元数据中指定绑定源和绑定路径,元数据被加载并创建为数据对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
在上述技术方案中,优选的,所述执行单元206还用于在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,以及在所述活动被执行结束后,发出活动完成事件;所述状态管理器204还用于监听所述事件,并调用状态校验方法判断所述活动是否允许被执行,以及监听所述活动完成事件,调用状态转换方法执行状态转换过程。
在上述技术方案中,优选的,所述状态管理器204还用于按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件;所述执行单元206在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件对所述活动进行校验,在校验通过时,执行所述活动,在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
在上述技术方案中,优选的,所述执行单元206还用于在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器204的状态校验方法,在校验通过时,执行所述活动,以及在所述活动执行结束时,调用所述状态管理器204的状态切换方法,执行状态切换。
因此,通过上述技术方案,在实现状态管理器204的基础上,数据处理通过事件处理或插件机制或服务调用,将数据对象和状态管理器204建立逻辑关联。在执行活动时,自动获取数据对象的当前状态值,执行前通知状态管理器204校验活动是否可执行,活动执行完成后通知状态管理器204切换当前状态,状态管理器204切换当前状态后,绑定机制通知数据对象状态已更改,并自动传送最新状态值,然后刷新数据对象的状态属性。
在上述任一技术方案中,优选的,所述状态管理还用于在接收到更新请求时,根据所述更新请求扩展、修改和/或新建所管理的状态数据。
状态管理器204中的状态集合、状态控制项集合和状态转换控制项集合支持根据实际需要在运行时动态扩展和修改或新建,以支持实际流程对于状态的灵活配置。
因此,本发明使用数据绑定、状态处理、数据处理技术在设计时和运行时都拆分了数据对象和状态控制逻辑之间的依赖耦合关系,支持在设计态和运行态根据实际需要扩展,修改或新建状态及其控制逻辑,而不需要修改数据对象及其活动的逻辑代码,实现了数据对象和活动与控制逻辑相分离的目的。
图3示出了根据本发明的数据对象与状态控制逻辑分离***的实现原理图。
如图3所示,为实现数据对象和状态控制逻辑更彻底的分离,本发明提出一种通过数据绑定、状态处理和数据处理来实现的分离方法,其中,
数据绑定实现数据对象到状态数据的映射,使数据对象可以从状态逻辑中独立出来,并在状态数据和数据对象之间保持状态的同步;
数据处理完成数据对象的活动对数据对象的变更影响,同时进行状态的校验和转换处理,数据处理主要有以下三种实现方式:
1,事件处理机制,解除数据对象的活动处理和状态控制逻辑代码间的依赖关系,状态控制逻辑通过侦听数据对象的活动发出的事件,触发状态控制逻辑处理;
2,插件机制,是另一种解除数据对象的活动处理和状态控制逻辑代码间的依赖关系的方法,状态控制逻辑按照数据对象的活动特定的插件规范,将状态控制逻辑处理作为一个插件注册进数据对象的活动的插件列表,数据对象活动读取注册的插件,从而完成数据对象的状态控制逻辑;
3,方法调用,是数据对象的活动处理通过调用状态管理器提供的状态控制逻辑方法完成数据对象的状态控制逻辑,在这种机制下,数据对象活动处理只依赖于状态管理器提供的状态控制逻辑方法的签名,不依赖于其内部逻辑,从功能上将数据活动和状态逻辑区隔开来。
应理解,上述三种实现方式可以两两结合或三种结合进行应用,当事件处理机制不能完成数据处理时,采用插件机制或方法调用进行数据处理,或者当插件机制不能完成数据处理时,采用方法调用或事件处理机制完成数据处理。
以下结合其他附图详细说明图3所示的各部分。
1.数据绑定
数据绑定简化了应用程序开发。数据绑定技术是实现数据对象及活动与状态逻辑分离方法的基础。数据对象和状态数据对象经过绑定通道直接关联,更改通知机制负责在状态发生变更时通知数据对象最新的状态,数据对象同步记录最新的状态。这样,避免了由活动逻辑模块处理状态逻辑并转换为数据对象数据的操作。同时,绑定机制动态更改绑定上下文,同一个状态可处理不同的数据对象而不需做出代码的改动。
例如,在项目管理模块中,项目的状态根据不同的项目类型会有不同的状态个数。如下表所示,定义了项目类型和状态数据:
状态分类
状态分类 | 项目类型 |
业主方 | 业主方基建 |
通用 | 一般项目 |
业主方 | 业主方物业 |
状态定义
状态 | 状态分类 |
新建 | 业主方 |
发布 | |
验收 | |
完工 | |
移交 | |
关闭 | |
新建 | 一般项目 |
发布 | |
完成 | |
关闭 |
项目
项目号 | 项目类型 | 状态 |
Proj01 | 业主方基建 | 新建 |
通过绑定机制,当新建项目Proj01指定了项目类型为“业主方基建”并执行“保存”操作后,本***的保存活动自动将项目Proj01绑定到对应的状态定义数据,通过触发状态控制逻辑自动将Proj01对象的状态置位“新建”;当用户执行“发布”活动后,绑定机制自动更新Proj01对象的状态到“发布”;在该***中,项目对象的程序代码不需关心如何获取状态的内容并设置到项目对象的状态属性中。
在本实现方法中,数据绑定为数据对象和状态数据对象之间提供数据同步的交互途径。在数据对象元数据中指定绑定源和绑定路径,元数据被加载并创建为数据对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
2.状态处理
在管理软件中,业务数据通常会有不同的状态,在不同的状态下,数据对象的可执行业务操作会有不同。当设置某个活动使业务数据对象状态发生改变时,数据对象的状态属性会发生变化。例如项目可能处于新建、发布、完工、关闭等状态。不同状态下,项目允许执行不同的活动的控制逻辑,如是否可更改、是否可撤消发布、是否可关闭等情况,这要求项目数据同时也能反映项目状态,确定可以执行哪些活动,不可以执行哪些活动。
在通常开发中,状态控制逻辑需要业务逻辑模块根据业务数据状态在活动内部编码实现,需要较多的状态判断操作,并且逻辑代码需要明确引用并固化实现状态的控制逻辑。这种控制方式繁琐且耦合度较高。本文描述的状态处理技术可以为数据对象状态控制提供简单的方案。
状态处理机制涉及的对象包括状态管理器、状态实例、状态控制项、状态转换控制项,以订单为示例的状态管理器204中的状态对象层次结构,如图4所示。
1)状态管理器管理状态的集合,并且该集合中有一个状态为当前状态,与数据对象的当前状态保持同步;状态集合允许在设计态设置,同时支持在运行态根据实际需要扩展,修改或新建。
2)状态管理器提供切换状态的方法,以便程序可以从一个状态切换到另一个状态,并通过数据绑定通知数据对象新的状态;该方法接收数据对象和活动,首先读取数据对象的当前状态,然后读取该状态的状态转换控制项集合,判定当前活动是否触发状态转换,如果触发,则执行将数据对象的状态切换到目标状态的处理。
3)状态管理器提供状态校验的方法,以便程序可以校验当前状态下当前活动是否允许执行;该方法接收数据对象和活动,首先读取数据对象的当前状态,然后读取该状态的状态控制项集合,判定当前活动是否允许执行并返回结果。
4)每个状态中可定义包含多个状态控制项的集合,基于该状态控制项判定每个控制项自身的活动或其它的数据的活动是否允许在该状态下执行;该集合允许在设计态设置,同时支持在运行态根据实际需要扩展,修改或新建。
5)每个状态中可定义包含多个状态转换控制项的集合,每个状态转换控制数据对象自身的活动在该状态下,该活动执行后,数据对象的状态切换到那个状态;该集合允许在设计态设置,同时支持在运行态根据实际需要扩展,修改或新建。
6)状态管理器的状态集合,状态控制项集合和状态转换控制项集合支持根据实际需要在运行时动态扩展和修改或新建,以支持实际流程对于状态的灵活配置。
3.数据处理
在实现状态管理器的基础上,数据处理通过事件处理或插件机制或服务调用,将数据对象和状态管理器建立逻辑关联。在执行活动时,自动获取数据对象的当前状态值,执行前通知状态管理器校验活动是否可执行,活动执行完成后通知状态管理器切换当前状态,状态管理器切换当前状态后,绑定机制通知数据对象状态已更改,并自动传送最新状态值至数据对象,然后刷新数据对象的状态属性。
数据处理主要有以下三种方式:
1、事件处理机制(参考图5),解除数据对象的活动处理和状态控制逻辑代码间的依赖关系,状态控制逻辑通过侦听数据对象的活动发出的事件,触发状态控制逻辑处理;
事件处理机制的处理过程如下:
1)当针对数据对象执行某个活动时,该活动获取数据对象的实例,并将其作为事件的参数,发出该活动的开始事件;
2)状态管理器侦听该活动的开始事件,调用状态校验方法,返回校验结果;
3)如果校验不通过,状态管理器返回不通过的异常结果;
4)该活动接收该异常结果,并将该异常结果返回活动调用者;
5)活动执行完成后,发出该活动的完成事件;
6)状态管理器侦听该活动的完成事件,调用状态转换方法,执行状态转换。
2、插件机制(参考图6),是另一种解除数据对象的活动处理和状态控制逻辑代码间的依赖关系的方法,状态控制逻辑按照数据对象的活动特定的插件规范,将状态控制逻辑处理作为一个插件注册进数据对象的活动的插件列表,数据对象活动读取注册的插件,从而完成数据对象的状态控制逻辑;
插件处理机制的处理过程如下:
1)设计态,状态管理器针对活动公布的处理前和完成插件标准,编写符合要求的状态校验和状态转换插件代码,该插件代码内部分别调用状态管理器的状态校验方法和状态转换方法;
2)当针对数据对象执行某个活动时,该活动获取数据对象的实例,调用处理前插件中注册的插件,调用状态管理器的校验插件;
3)状态管理器的校验插件调用状态校验方法,返回校验结果;
4)如果校验不通过,状态管理器返回不通过的异常结果;
5)该活动接收不通过的异常结果,返回活动调用者;
6)活动执行完成后,调用完成插件中注册的插件,调用状态管理器的完成插件;
7)状态管理器的校验插件调用状态转换方法,执行状态转换。
3、方法调用(参考图7),是数据对象的活动处理,通过调用状态管理器提供的状态控制逻辑方法完成数据对象的状态控制逻辑,在这种机制下,数据对象活动处理只依赖于状态管理器提供的状态控制逻辑方法的签名,不依赖于其内部逻辑,从功能上将数据活动和状态逻辑区隔开来。
方法调用的处理机制过程如下:
1)设计态,活动根据状态管理器公布的状态校验方法和状态转换方法,在活动内部分别编写调用状态管理器的状态校验方法和状态转换方法的代码实现;
2)运行时,当针对数据对象执行某个活动时,该活动获取数据对象的实例,主动调用状态管理器的校验方法;
2)如果校验不通过,状态管理器返回不通过的异常结果;
3)该活动接收不通过的异常结果,返回活动调用者。
4)校验通过,执行活动。
5)活动执行完成时,调用状态管理器的状态转换方法,执行状态转换。
根据本发明的技术方案使用数据绑定、状态处理、数据处理技术在设计时和运行时都拆分了数据对象和状态控制逻辑之间的依赖耦合关系,支持在设计态和运行态根据实际需要扩展,修改或新建状态及其控制逻辑,而不需要修改数据对象及其活动的逻辑代码,实现了数据对象和活动与控制逻辑相分离的目的。
图8示出了根据本发明的实施例的数据对象与状态控制逻辑分离方法的流程图。
如图8所示,根据本发明的实施例的数据对象与状态控制逻辑分离方法,包括:步骤802,将数据对象与状态数据通过绑定进行关联,状态数据包括状态类型以及对应于状态类型的控制逻辑,由状态管理器管理状态数据;步骤804,在将针对数据对象执行活动时,状态管理器管理读取数据对象的当前状态,根据与当前状态对应的控制逻辑,判断活动是否允许被执行;步骤806,在判断出活动允许被执行时,执行活动,并在活动被执行结束后,通知状态管理器基于状态数据将数据对象的原状态切换至目标状态;步骤808,在状态管理器切换数据对象的状态后,将目标状态的值传送至数据对象,以更新数据对象的状态属性。
通过数据绑定为数据对象和状态数据之间提供数据同步的交互途径。在数据对象元数据中指定绑定源和绑定路径,元数据被加载并创建为数据对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
在上述技术方案中,优选的,所述步骤804具体包括:在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,所述状态管理器监听所述事件,并调用状态校验方法判断所述活动是否允许被执行;所述步骤806具体包括:在所述活动被执行结束后,发出活动完成事件,所述状态管理器监听所述活动完成事件,调用状态转换方法执行状态转换过程。
在上述技术方案中,优选的,所述步骤804具体包括:所述状态管理器按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件,在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件,在校验通过时,执行所述活动;所述步骤806具体包括:在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
在上述技术方案中,优选的,所述步骤804具体包括:在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器的状态校验方法,在校验通过时,执行所述活动;所述步骤808具体包括:在所述活动执行结束时,调用所述状态管理器的状态切换方法,执行状态切换。
因此,通过上述技术方案,在实现状态管理器的基础上,数据处理通过事件处理或插件机制或服务调用,将数据对象和状态管理器建立逻辑关联。在执行活动时,自动获取数据对象的当前状态值,执行前通知状态管理器校验活动是否可执行,活动执行完成后通知状态管理器切换当前状态,状态管理器切换当前状态后,绑定机制通知数据对象状态已更改,并自动传送最新状态值,然后刷新数据对象的状态属性。
在上述任一技术方案中,优选的,在接收到更新请求时,所述状态管理器根据所述更新请求扩展、修改和/或新建所管理的状态数据。状态管理器中的状态集合、状态控制项集合和状态转换控制项集合支持根据实际需要在运行时动态扩展和修改或新建,以支持实际流程对于状态的灵活配置。
本发明所描述的数据对象和状态控制逻辑的分离方法,在设计时和运行时带来了较大的灵活性和效率改进:
在开发设计阶段,数据对象及活动编程人员与控制逻辑编程人员可并行展开各自的代码开发,并不会互相影响,只要遵照相同的规约,在集成时,数据对象及活动与控制逻辑代码模块可顺利集成而不需任何改动。这种开发模式对比当前的紧密耦合的编程模式,真正实现了并行开发;
在运行时,在传统技术下,数据对象及活动与控制逻辑模块在运行期耦合在一个对象中,通常一个活动对象要同时负责数据对象活动对象功能模块的逻辑处理,同时还要负责状态控制的逻辑处理,这使得动态状态控制逻辑难以实现。在使用本文描述的分离技术后,运行期间,数据对象和活动与状态控制逻辑由两个不同的对象提供,通过数据绑定关联起来,数据对象和活动只负责数据对象以及活动对象功能模块的逻辑处理,对应的状态控制逻辑等通过绑定和数据处理自动与状态控制逻辑模块相匹配,这样,在运行时可根据实际需要扩展,修改或新建状态及其控制逻辑,轻松实现动态改变业务逻辑的功能。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据对象与状态控制逻辑分离***,其特征在于,包括:
关联单元,将所述数据对象与状态管理器中的状态数据通过绑定进行关联,所述状态数据包括状态类型以及对应于所述状态类型的控制逻辑,由状态管理器管理所述状态数据;
所述状态管理器,在将针对所述数据对象执行活动时,读取所述数据对象的当前状态,根据与所述当前状态对应的控制逻辑,判断所述活动是否允许被执行,以及在接收到来自执行单元的通知时,基于所述状态数据将所述数据对象的原状态切换至目标状态,在所述状态管理器切换所述数据对象的状态后,将所述目标状态的值传送至所述数据对象,以更新所述数据对象的状态属性;
所述执行单元,在判断出所述活动允许被执行时,执行所述活动,并在所述活动被执行结束后,向所述状态管理器发送通知;
所述执行单元还用于在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,以及在所述活动被执行结束后,发出活动完成事件。
2.根据权利要求1所述的数据对象与状态控制逻辑分离***,其特征在于,所述状态管理器还用于监听所述事件,并调用状态校验方法判断所述活动是否允许被执行,以及监听所述活动完成事件,调用状态转换方法执行状态转换过程。
3.根据权利要求1所述的数据对象与状态控制逻辑分离***,其特征在于,所述状态管理器还用于按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件;
所述执行单元在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件对所述活动进行校验,在校验通过时,执行所述活动,在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
4.根据权利要求1所述的数据对象与状态控制逻辑分离***,其特征在于,所述执行单元还用于在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器的状态校验方法,在校验通过时,执行所述活动,以及在所述活动执行结束时,调用所述状态管理器的状态切换方法,执行状态切换。
5.根据权利要求1至4中任一项所述的数据对象与状态控制逻辑分离***,其特征在于,所述状态管理还用于在接收到更新请求时,根据所述更新请求扩展、修改和/或新建所管理的状态数据。
6.一种数据对象与状态控制逻辑分离方法,其特征在于,包括:
步骤802,将所述数据对象与状态数据通过绑定进行关联,所述状态数据包括状态类型以及对应于所述状态类型的控制逻辑,由状态管理器管理所述状态数据;
步骤804,在将针对所述数据对象执行活动时,所述状态管理器管理读取所述数据对象的当前状态,根据与所述当前状态对应的控制逻辑,判断所述活动是否允许被执行;
步骤806,在判断出所述活动允许被执行时,执行所述活动,并在所述活动被执行结束后,通知所述状态管理器基于所述状态数据将所述数据对象的原状态切换至目标状态;
步骤808,在所述状态管理器切换所述数据对象的状态后,将所述目标状态的值传送至所述数据对象,以更新所述数据对象的状态属性;
所述步骤804具体包括:在将执行所述活动时,获取所述数据对象的实例,并发出以所述实例作为参数的事件,所述状态管理器监听所述事件,并调用状态校验方法判断所述活动是否允许被执行。
7.根据权利要求6所述的数据对象与状态控制逻辑分离方法,其特征在于,所述步骤806具体包括:在所述活动被执行结束后,发出活动完成事件,所述状态管理器监听所述活动完成事件,调用状态转换方法执行状态转换过程。
8.根据权利要求6所述的数据对象与状态控制逻辑分离方法,其特征在于,所述步骤804具体包括:所述状态管理器按照与所述活动对应的插件规范,将与所述数据对象对应的状态控制逻辑处理成一个插件,并将所述插件注册至所述活动的插件列表中,所述插件包括校验插件和状态切换插件,在将执行所述活动时,获取所述数据对应的实例,调用所述校验插件,在校验通过时,执行所述活动;
所述步骤806具体包括:在所述活动执行结束时,调用所述状态切换插件,执行状态切换。
9.根据权利要求6所述的数据对象与状态控制逻辑分离方法,其特征在于,所述步骤804具体包括:在所述活动内部编写状态校验方法和状态切换方法的代码,在针对所述数据对象执行所述活动时,调用所述状态管理器的状态校验方法,在校验通过时,执行所述活动;
所述步骤808具体包括:在所述活动执行结束时,调用所述状态管理器的状态切换方法,执行状态切换。
10.根据权利要求6至9中任一项所述的数据对象与状态控制逻辑分离方法,其特征在于,在接收到更新请求时,所述状态管理器根据所述更新请求扩展、修改和/或新建所管理的状态数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210479553.0A CN103019695B (zh) | 2012-11-22 | 2012-11-22 | 数据对象与状态控制逻辑分离***和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210479553.0A CN103019695B (zh) | 2012-11-22 | 2012-11-22 | 数据对象与状态控制逻辑分离***和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019695A CN103019695A (zh) | 2013-04-03 |
CN103019695B true CN103019695B (zh) | 2016-07-06 |
Family
ID=47968334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210479553.0A Active CN103019695B (zh) | 2012-11-22 | 2012-11-22 | 数据对象与状态控制逻辑分离***和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019695B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045603A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建有限状态机模型框架的方法、装置及电子装置 |
CN106547525A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种执行完全状态模式的web app的方法和装置 |
CN110764932A (zh) * | 2019-10-22 | 2020-02-07 | 网易传媒科技(北京)有限公司 | 数据处理方法、***、介质和计算设备 |
CN111258474B (zh) * | 2020-01-15 | 2021-07-06 | 广东三维家信息科技有限公司 | 基于gui的交互方法、装置及电子设备 |
CN113419689B (zh) * | 2021-08-25 | 2021-12-07 | 苏州浪潮智能科技有限公司 | 基于状态分析的对象管理的方法、***、设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1889644A (zh) * | 2006-01-13 | 2007-01-03 | 深圳创维-Rgb电子有限公司 | 使用状态机构建电视机软件***的方法 |
CN101872305A (zh) * | 2010-06-08 | 2010-10-27 | 用友软件股份有限公司 | Ui表现和业务逻辑分离方法和*** |
CN102103497A (zh) * | 2009-12-18 | 2011-06-22 | 阿尔卡特朗讯 | 有限状态机执行装置和方法、在应用中的建立和使用方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7464091B2 (en) * | 2002-11-27 | 2008-12-09 | Sap Ag | Method and software for processing data objects in business applications |
-
2012
- 2012-11-22 CN CN201210479553.0A patent/CN103019695B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1889644A (zh) * | 2006-01-13 | 2007-01-03 | 深圳创维-Rgb电子有限公司 | 使用状态机构建电视机软件***的方法 |
CN102103497A (zh) * | 2009-12-18 | 2011-06-22 | 阿尔卡特朗讯 | 有限状态机执行装置和方法、在应用中的建立和使用方法 |
CN101872305A (zh) * | 2010-06-08 | 2010-10-27 | 用友软件股份有限公司 | Ui表现和业务逻辑分离方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN103019695A (zh) | 2013-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA3092364C (en) | Live migration of clusters in containerized environments | |
CN103019695B (zh) | 数据对象与状态控制逻辑分离***和方法 | |
CN101853172B (zh) | 复杂可编程逻辑器件cpld动态升级装置及方法 | |
US20130159650A1 (en) | Backup method and information processing apparatus | |
CN107181679A (zh) | 一种端口绑定实现方法及装置 | |
CN110532074A (zh) | 一种多租户模式SaaS服务集群环境的任务调度方法及*** | |
US20140047222A1 (en) | Method and device for recombining runtime instruction | |
US20060101059A1 (en) | Employment method, an employment management system and an employment program for business system | |
US20140025860A1 (en) | Information apparatus, method for switching screen, and computer-readable recording medium having stored therein screen switch program | |
CN103324582A (zh) | 一种内存迁移方法、装置及设备 | |
CN104471523A (zh) | 计算机***及其控制方法 | |
CN101286215A (zh) | 同时支持人工流和自动流的工作流引擎 | |
US7694182B2 (en) | Debugging system and method | |
CN103036975A (zh) | 虚拟机控制方法及装置 | |
CN104598309A (zh) | 基于os虚拟化的多模式os的***和其创建、切换方法 | |
US20230273801A1 (en) | Method for configuring compute mode, apparatus, and computing device | |
CN103678163A (zh) | 数据流的切换方法、装置及*** | |
CN112230978A (zh) | 一种多数据源动态切换方法、电子设备及存储介质 | |
US20050086665A1 (en) | Autonomous device driver | |
CN101373464A (zh) | 自动调用表格设置的方法、装置及*** | |
CN111880905B (zh) | 一种openstack跨越cell迁移虚拟机的方法 | |
WO2015196524A1 (zh) | 软件升级处理方法、装置、终端及服务器 | |
CN108874504A (zh) | 一种多虚拟化平台的管理方法及装置 | |
JP4034201B2 (ja) | 計算機資源利用方式及び計算機資源利用方法 | |
CN109684281A (zh) | 一种动态可配置的文件替换和监控的方法和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 100094 Haidian District North Road, Beijing, No. 68 Applicant after: Yonyou Network Technology Co., Ltd. Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant before: UFIDA Software Co., Ltd. |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |