CN112860354A - 一种基于Laravel框架的状态机的建模方法及终端 - Google Patents
一种基于Laravel框架的状态机的建模方法及终端 Download PDFInfo
- Publication number
- CN112860354A CN112860354A CN202110125085.6A CN202110125085A CN112860354A CN 112860354 A CN112860354 A CN 112860354A CN 202110125085 A CN202110125085 A CN 202110125085A CN 112860354 A CN112860354 A CN 112860354A
- Authority
- CN
- China
- Prior art keywords
- state
- migration
- model
- function
- event
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
- G06F9/4862—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于Laravel框架的状态机的建模方法及终端,包括:S1、创建一个状态机特性,状态机特性包括多种函数,在Laravel框架的模型中使用状态机特性;S2、在模型中定义模型状态集和迁移事件集,模型状态集配置了模型的不同状态类型,迁移事件集中配置了迁移事件的不同阶段的模型的状态;S3、实例化模型,将迁移事件集注册为模型自定义事件,状态机特性会在模型实例化时以及模型实例化后执行与其适配的函数;S4、当调用迁移事件集中的迁移事件后,状态机特性内的函数会随着迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据迁移事件集中的配置设定模型的状态。本发明能够快速创建具有状态机特性的模型,快速扩展模型功能。
Description
技术领域
本发明涉及计算机软件领域,尤其涉及一种基于Laravel框架的状态机的建模方法及终端。
背景技术
Laravel是一个由Taylor Otwell所创建的开源PHP Web框架,旨在实现的Web软件的MVC架构,Laravel的特色包含:支持用户身份验证和许可,具有模块化的包系统且有专属的包库,提供连接许多种类的关连式数据库的方式,提供工具来协助应用程序的部署和维持,并且发展出许多语法糖,是PHP应用开发领域中较为流行的开发框架。
Laravel中的Elocquent,这是一个对象关系映射器(ORM),它使与数据库的交互变得非常便利。使用Elacutent时,每个数据库表都有一个对应的“模型”,用于与该表进行交互。除了从数据库表中检索记录之外,还可以从模型的表中插入、更新和删除记录。
Trait是PHP开发语言中的一种代码复用机制。Trait减少了单继承语言的限制,使开发人员能够自由地在不同层次结构的独立的类中复用method。Trait和Class组合的语义定义了一种减少复杂性的方式。
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。一般由状态、迁移和校验器等组成,通过迁移来改变状态,并可在迁移前触发迁移前事件回调和迁移后触发迁移后事件回调,状态机在Web应用开发领域广泛使用,例如订单状态控制、任务状态控制等,通过使用状态机编程,能够使业务代码看起来更加简洁、简练、易于维护,易于管理,业务流程更加规范。
在Laravel的数据模型中是不支持原生的状态机编程的,如果用于开发类似订单、任务类等相对复杂、多状态和多流程的业务模型时,通常需要在多处进行业务逻辑的判断处理,常常会出现业务代码冗杂、不易于维护和可读性差等问题。另外,Laravel的模型默认事件仅有查询后事件、创建中事件、创建后事件、更新中事件、更新后事件、保存前事件、保存后事件、删除前事件和删除后事件等几个简单的数据操作事件,在复杂的业务模型中并不能有效、简单的注册自定义事件,从而既不能快速扩展模型的功能,又不能有效保证业务代码的可读性。
发明内容
(一)要解决的技术问题
为了解决现有技术的上述问题,本发明提供一种基于Laravel框架的状态机的建模方法及终端,能够快速扩展模型的功能。
(二)技术方案
为了达到上述目的,本发明采用的一种技术方案为:一种基于Laravel框架的状态机的建模方法,包括:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
本发明采用的另一种技术方案为:一种基于Laravel框架的状态机的建模终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
(三)有益效果
本发明的有益效果是:通过在模型中使用状态机特性,并且在模型中定义了模型状态机和事件迁移集,实现了快速创建具有状态机特性的模型,从而能够快速扩展模型的功能,开发者通过查看模型状态集,可快速了解该模型的业务节点,开发者通过查看事件迁移集的配置,可快速了解该模型的业务流程;本发明通过状态机特性与模型自定义事件相结合,实现了对模型的业务流程更加细致的管理与监听,提高了模型的可用性。
附图说明
图1为本发明的基于Laravel框架的状态机的建模方法的流程图;
图2为本发明的基于Laravel框架的状态机的建模终端的结构示意图;
【附图标记说明】
1、一种基于Laravel框架的状态机的建模终端;2、存储器;3、处理器。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
请参照图1所示,一种基于Laravel框架的状态机的建模方法,包括:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
从上述描述可知,本发明的有益效果在于:通过在模型中使用状态机特性,并且在模型中定义了模型状态机和事件迁移集,实现了快速创建具有状态机特性的模型,从而能够快速扩展模型的功能,开发者通过查看模型状态集,可快速了解该模型的业务节点,开发者通过查看事件迁移集的配置,可快速了解该模型的业务流程;本发明通过状态机特性与模型自定义事件相结合,实现了对模型的业务流程更加细致的管理与监听,提高了模型的可用性。
进一步地,所述迁移事件集定义了迁移事件的操作内容、迁移名称、迁入状态和迁出状态,所述迁入状态为所述迁移事件执行前的阶段的模型的状态,所述迁出状态为所述迁移事件执行后的阶段的模型的状态;
所述模型状态集中的状态类型包括初始状态、普通状态和终极状态,所述迁移事件的执行可改变所述模型的状态;
所述状态机特性包括:构建函数、初始化函数、特性引导函数、迁移校验函数、方法重载函数和日志函数;
所述初始化函数用于加载所述状态集和事件迁移集,所述事件迁移集中的迁移事件包括已注册的迁移前模型自定义事件和迁移后模型自定义事件;
所述构建函数在所述模型实例化时会被调用,可在所述构建函数中调用初始化函数达到初始化所述状态机特性的作用;
所述特性引导函数会在模型实例化后默认调用,在所述模型实例化的回调过程中,若当前模型为新建的模型,特性引导函数会根据所述模型状态集中的初始状态对所述模型的状态值进行赋值,作为新建的所述模型当前状态;
若所述模型已经存在于数据库中,则所述特性引导函数会根据所述数据库保存的状态对模型的状态值进行赋值,作为所述模型的当前状态;
所述迁移检验函数用于检验被调用的迁移事件是否合法;
所述方法重载函数用于迁移所述模型状态集中的不同状态;
所述日志函数用于记录迁移事件被调用的过程。
进一步地,所述S4中调用所述迁移事件集中的迁移事件的方式包括:使用调用类成员函数的方式调用所述迁移事件集中的迁移事件。
进一步地,所述S4包括:
S40、当使用调用类成员函数的方式调用所述迁移事件集中的迁移事件后,在所述方法重载函数中,获取被调用函数的函数名称和函数参数,将所述函数名称传入所述迁移校验函数;
S41、所述迁移校验函数校验所述函数名称是否合法,若合法,则触发所述迁移前自定义事件,则将所述函数名称和函数参数传入所述迁移事件集,执行所述迁移事件集中与所述函数名称适配的迁移事件;
S42、根据所述迁移事件集获取所述迁移事件的迁出状态,根据所述迁出状态对所述模型的状态进行赋值,触发所述迁移后模型自定义事件;
S43、调用所述日志函数,记录所述迁移事件的调用过程;
S44、将所述状态机状态存储至数据库中。
从上述描述可知,能够对调用函数进行检验,保证了安全性,另外,能够通过日志函数对迁移事件的调用过程进行记录,方便了后期维护。
进一步地,所述S41中所述迁移校验函数校验所述函数名称是否合法包括:
S411、遍历所述迁移事件集,判断迁移事件集中是否存在与所述函数名称对应的迁移事件;若否,执行S412,若是,S413;
S412、判定不合法;
S413、校验所述模型的状态是否为普通状态以满足所述迁移事件的迁入,若否,执行S414,否则,执行S415;
S414、判定不合法;
S415,校验所述模型状态集中是否存在与所述迁移事件的迁出状态适配的终极状态,若存在,则判定合法,否则,则判定不合法。
从上述描述可知,在校验过程中,需要对调用函数的函数名称、模型的状态和模型状态集均进行校验,当都校验通过后才能够进行迁移事件的调用,安全性高。
请参照图2所示,一种基于Laravel框架的状态机的建模终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会在所述迁移事件执行的不同阶段执行与其适配的函数,所述模型状态集随所述迁移事件执行的不同阶段配置所述模型的状态。
从上述描述可知,本发明的有益效果在于:通过在模型中使用状态机特性,并且在模型中定义了模型状态机和事件迁移集,实现了快速创建具有状态机特性的模型,从而能够快速扩展模型的功能,开发者通过查看模型状态集,可快速了解该模型的业务节点,开发者通过查看事件迁移集的配置,可快速了解该模型的业务流程;本发明通过状态机特性与模型自定义事件相结合,实现了对模型的业务流程更加细致的管理与监听,提高了模型的可用性。
进一步地,所述迁移事件集定义了迁移事件的操作内容、迁移名称、迁入状态和迁出状态;
所述模型状态集中的状态类型包括初始状态、普通状态和终极状态,所述迁移事件的执行可改变所述模型的状态;
所述状态机特性包括:构建函数、初始化函数、特性引导函数、迁移校验函数、方法重载函数和日志函数;
所述初始化函数用于加载所述状态集和事件迁移集,所述事件迁移集中的迁移事件包括已注册的迁移前模型自定义事件和迁移后模型自定义事件;
所述构建函数在所述模型实例化时会被调用,可在所述构建函数中调用初始化函数达到初始化所述状态机特性的作用;
所述特性引导函数会在模型实例化后默认调用,在所述模型实例化的回调过程中,若当前模型为新建的模型,特性引导函数会根据所述模型状态集中的初始状态对所述模型的状态值进行赋值,作为新建的所述模型当前状态;
若所述模型已经存在于数据库中,则所述特性引导函数会根据所述数据库保存的状态对模型的状态值进行赋值,作为所述模型的当前状态;
所述迁移检验函数用于检验被调用的迁移事件是否合法;
所述方法重载函数用于迁移所述模型状态集中的不同状态;
所述日志函数用于记录迁移事件被调用的过程。
进一步地,所述S4中调用所述迁移事件集中的迁移事件的方式包括:使用调用类成员函数的方式调用所述迁移事件集中的迁移事件。
进一步地,所述S4包括:
S40、当使用调用类成员函数的方式调用所述迁移事件集中的迁移事件后,在所述方法重载函数中,获取被调用函数的函数名称和函数参数,将所述函数名称传入所述迁移校验函数;
S41、所述迁移校验函数校验所述函数名称是否合法,若合法,则触发所述迁移前自定义事件,则将所述函数名称和函数参数传入所述迁移事件集,执行所述迁移事件集中与所述函数名称适配的迁移事件;
S42、根据所述迁移事件集获取所述迁移事件的迁出状态,根据所述迁出状态对所述模型的状态进行赋值,触发所述迁移后模型自定义事件;
S43、调用所述日志函数,记录所述迁移事件的调用过程;
S44、将所述状态机状态存储至数据库中。
从上述描述可知,能够对调用函数进行检验,保证了安全性,另外,能够通过日志函数对迁移事件的调用过程进行记录,方便了后期维护。
进一步地,所述S41中所述迁移校验函数校验所述函数名称是否合法包括:
S411、遍历所述迁移事件集,判断迁移事件集中是否存在与所述函数名称对应的迁移事件;若否,执行S412,若是,S413;
S412、判定不合法;
S413、校验所述模型的状态是否为普通状态以满足所述迁移事件的迁入,若否,执行S414,否则,执行S415;
S414、判定不合法;
S415,校验所述模型状态集中是否存在与所述迁移事件的迁出状态适配的终极状态,若存在,则判定合法,否则,则判定不合法。
从上述描述可知,在校验过程中,需要对调用函数的函数名称、模型的状态和模型状态集均进行校验,当都校验通过后才能够进行迁移事件的调用,安全性高。
实施例一
请参照图1所示,一种基于Laravel框架的状态机的建模方法,包括:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
其中,所述迁移事件集定义了迁移事件的操作内容、迁移名称、迁入状态和迁出状态,所述迁入状态为所述迁移事件执行前的阶段的模型的状态,所述迁出状态为所述迁移事件执行后的阶段的模型的状态,具体地,可通过数组的形式进行上述的定义;
所述模型状态集中的状态类型包括初始状态、普通状态和终极状态,所述迁移事件的执行可改变所述模型的状态,例如,所述迁移事件集中的迁移事件a的迁入状态为普通状态,迁出状态为终极状态,当所述迁移事件a执行时所述模型由迁入状态(普通状态)改变为迁出状态(终极状态;当然,若所述迁移事件集中的迁移事件a的迁入状态为普通状态,迁出状态也为普通状态,当所述迁移事件a执行时,所述模型的状态会保持为普通状态,不会发生改变;
所述状态机特性包括:构建函数、初始化函数、特性引导函数、迁移校验函数、方法重载函数和日志函数;
所述初始化函数用于加载所述状态集和事件迁移集,所述事件迁移集中的迁移事件包括已注册的迁移前模型自定义事件和迁移后模型自定义事件;
所述构建函数在所述模型实例化时会被调用,可在所述构建函数中调用初始化函数达到初始化所述状态机特性的作用;
所述特性引导函数会在模型实例化后默认调用,在所述模型实例化的回调过程中,若当前模型为新建的模型,特性引导函数会根据所述模型状态集中的初始状态对所述模型的状态值进行赋值,作为新建的所述模型当前状态;
若所述模型已经存在于数据库中,则所述特性引导函数会根据所述数据库保存的状态对模型的状态值进行赋值,作为所述模型的当前状态;
所述迁移检验函数用于检验被调用的迁移事件是否合法;
所述方法重载函数用于迁移所述模型状态集中的不同状态,具体地,在PHP开发语言中,在对象中调用一个不可访问的函数时,方法重载会被调用。根据PHP开发语言的规则,在状态机特性中重写该方法重载函数,可拦截每次不可访问的函数的调用,进而做进一步的处理;因为在所述方法重载函数中,所述迁移事件集中的迁移事件并不是真正的类成员方法,所以通过调用普通类成员函数的方式,调用所述迁移事件集配置中的事件时,会被该方法重载函数捕获;
所述日志函数用于记录迁移事件被调用的过程,具体的,所述日志函数的日志结构为模型名称、迁移事件、迁出状态、迁入状态、迁移时间、迁移人、备注等信息。
其中,所述S4中调用所述迁移事件集中的迁移事件的方式包括:使用调用类成员函数的方式调用所述迁移事件集中的迁移事件。
其中,所述S4包括:
S40、当使用调用类成员函数的方式调用所述迁移事件集中的迁移事件后,在所述方法重载函数中,获取被调用函数的函数名称和函数参数,将所述函数名称传入所述迁移校验函数;
S41、所述迁移校验函数校验所述函数名称是否合法,若合法,则触发所述迁移前自定义事件,则将所述函数名称和函数参数传入所述迁移事件集,执行所述迁移事件集中与所述函数名称适配的迁移事件;
S42、根据所述迁移事件集获取所述迁移事件的迁出状态,根据所述迁出状态对所述模型的状态进行赋值,触发所述迁移后模型自定义事件;
S43、调用所述日志函数,记录所述迁移事件的调用过程;
S44、将所述状态机状态存储至数据库中。
其中,所述S41中所述迁移校验函数校验所述函数名称是否合法包括:
S411、遍历所述迁移事件集,判断迁移事件集中是否存在与所述函数名称对应的迁移事件;若否,执行S412,若是,S413;
S412、判定不合法;
S413、校验所述模型的状态是否为普通状态以满足所述迁移事件的迁入,若否,执行S414,否则,执行S415;
S414、判定不合法;
S415,校验所述模型状态集中是否存在与所述迁移事件的迁出状态适配的终极状态,若存在,则判定合法,否则,则判定不合法。
实施例二
请参照图2,一种基于Laravel框架的状态机的建模终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。
综上所述,本发明提供的一种基于Laravel框架的状态机的建模方法和终端,通过在模型中使用状态机特性,并且在模型中定义了模型状态机和事件迁移集,实现了快速创建具有状态机特性的模型,从而能够快速扩展模型的功能,开发者通过查看模型状态集,可快速了解该模型的业务节点,开发者通过查看事件迁移集的配置,可快速了解该模型的业务流程;本发明通过状态机特性与模型自定义事件相结合,实现了对模型的业务流程更加细致的管理与监听,提高了模型的可用性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于Laravel框架的状态机的建模方法,其特征在于,包括:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
2.根据权利要求1所述的基于Laravel框架的状态机的建模方法,其特征在于,所述迁移事件集定义了迁移事件的操作内容、迁移名称、迁入状态和迁出状态,所述迁入状态为所述迁移事件执行前的阶段的模型的状态,所述迁出状态为所述迁移事件执行后的阶段的模型的状态;
所述模型状态集中的状态类型包括初始状态、普通状态和终极状态,所述迁移事件的执行可改变所述模型的状态;
所述状态机特性包括:构建函数、初始化函数、特性引导函数、迁移校验函数、方法重载函数和日志函数;
所述初始化函数用于加载所述状态集和事件迁移集,所述事件迁移集中的迁移事件包括已注册的迁移前模型自定义事件和迁移后模型自定义事件;
所述构建函数在所述模型实例化时会被调用,可在所述构建函数中调用初始化函数达到初始化所述状态机特性的作用;
所述特性引导函数会在模型实例化后默认调用,在所述模型实例化的回调过程中,若当前模型为新建的模型,特性引导函数会根据所述模型状态集中的初始状态对所述模型的状态值进行赋值,作为新建的所述模型当前状态;
若所述模型已经存在于数据库中,则所述特性引导函数会根据所述数据库保存的状态对模型的状态值进行赋值,作为所述模型的当前状态;
所述迁移检验函数用于检验被调用的迁移事件是否合法;
所述方法重载函数用于迁移所述模型状态集中的不同状态;
所述日志函数用于记录迁移事件被调用的过程。
3.根据权利要求2所述的基于Laravel框架的状态机的建模方法,其特征在于,所述S4中调用所述迁移事件集中的迁移事件的方式包括:使用调用类成员函数的方式调用所述迁移事件集中的迁移事件。
4.根据权利要求3所述的基于Laravel框架的状态机的建模方法,其特征在于,所述S4包括:
S40、当使用调用类成员函数的方式调用所述迁移事件集中的迁移事件后,在所述方法重载函数中,获取被调用函数的函数名称和函数参数,将所述函数名称传入所述迁移校验函数;
S41、所述迁移校验函数校验所述函数名称是否合法,若合法,则触发所述迁移前自定义事件,则将所述函数名称和函数参数传入所述迁移事件集,执行所述迁移事件集中与所述函数名称适配的迁移事件;
S42、根据所述迁移事件集获取所述迁移事件的迁出状态,根据所述迁出状态对所述模型的状态进行赋值,触发所述迁移后模型自定义事件;
S43、调用所述日志函数,记录所述迁移事件的调用过程;
S44、将所述状态机状态存储至数据库中。
5.根据权利要求4所述的基于Laravel框架的状态机的建模方法,其特征在于,所述S41中所述迁移校验函数校验所述函数名称是否合法包括:
S411、遍历所述迁移事件集,判断迁移事件集中是否存在与所述函数名称对应的迁移事件;若否,执行S412,若是,S413;
S412、判定不合法;
S413、校验所述模型的状态是否为普通状态以满足所述迁移事件的迁入,若否,执行S414,否则,执行S415;
S414、判定不合法;
S415,校验所述模型状态集中是否存在与所述迁移事件的迁出状态适配的终极状态,若存在,则判定合法,否则,则判定不合法。
6.一种基于Laravel框架的状态机的建模终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、创建一个状态机特性,所述状态机特性包括多种函数,在Laravel框架的模型中使用所述状态机特性;
S2、在所述模型中定义模型状态集和迁移事件集,所述模型状态集配置了所述模型的不同状态类型,所述迁移事件集中配置了迁移事件的不同阶段的模型的状态;
S3、实例化所述模型,将所述迁移事件集注册为模型自定义事件,所述状态机特性会在所述模型实例化时以及所述模型实例化后执行与其适配的函数;
S4、当调用所述迁移事件集中的迁移事件后,所述状态机特性内的函数会随着所述迁移事件执行的不同阶段执行与其适配的函数,随着迁移事件执行的不同阶段会根据所述迁移事件集中的配置设定所述模型的状态。
7.根据权利要求6所述的基于Laravel框架的状态机的建模终端,其特征在于,所述迁移事件集定义了迁移事件的操作内容、迁移名称、迁入状态和迁出状态,所述迁入状态为所述迁移事件执行前的阶段的模型的状态,所述迁出状态为所述迁移事件执行后的阶段的模型的状态;
所述模型状态集中的状态类型包括初始状态、普通状态和终极状态,所述迁移事件的执行可改变所述模型的状态;
所述状态机特性包括:构建函数、初始化函数、特性引导函数、迁移校验函数、方法重载函数和日志函数;
所述初始化函数用于加载所述状态集和事件迁移集,所述事件迁移集中的迁移事件包括已注册的迁移前模型自定义事件和迁移后模型自定义事件;
所述构建函数在所述模型实例化时会被调用,可在所述构建函数中调用初始化函数达到初始化所述状态机特性的作用;
所述特性引导函数会在模型实例化后默认调用,在所述模型实例化的回调过程中,若当前模型为新建的模型,特性引导函数会根据所述模型状态集中的初始状态对所述模型的状态值进行赋值,作为新建的所述模型当前状态;
若所述模型已经存在于数据库中,则所述特性引导函数会根据所述数据库保存的状态对模型的状态值进行赋值,作为所述模型的当前状态;
所述迁移检验函数用于检验被调用的迁移事件是否合法;
所述方法重载函数用于迁移所述模型状态集中的不同状态;
所述日志函数用于记录迁移事件被调用的过程。
8.根据权利要求7所述的基于Laravel框架的状态机的建模终端,其特征在于,所述S4中调用所述迁移事件集中的迁移事件的方式包括:使用调用类成员函数的方式调用所述迁移事件集中的迁移事件。
9.根据权利要求8所述的基于Laravel框架的状态机的建模终端,其特征在于,所述S4包括:
S40、当使用调用类成员函数的方式调用所述迁移事件集中的迁移事件后,在所述方法重载函数中,获取被调用函数的函数名称和函数参数,将所述函数名称传入所述迁移校验函数;
S41、所述迁移校验函数校验所述函数名称是否合法,若合法,则触发所述迁移前自定义事件,则将所述函数名称和函数参数传入所述迁移事件集,执行所述迁移事件集中与所述函数名称适配的迁移事件;
S42、根据所述迁移事件集获取所述迁移事件的迁出状态,根据所述迁出状态对所述模型的状态进行赋值,触发所述迁移后模型自定义事件;
S43、调用所述日志函数,记录所述迁移事件的调用过程;
S44、将所述状态机状态存储至数据库中。
10.根据权利要求9所述的基于Laravel框架的状态机的建模终端,其特征在于,所述S41中所述迁移校验函数校验所述函数名称是否合法包括:
S411、遍历所述迁移事件集,判断迁移事件集中是否存在与所述函数名称对应的迁移事件;若否,执行S412,若是,S413;
S412、判定不合法;
S413、校验所述模型的状态是否为普通状态以满足所述迁移事件的迁入,若否,执行S414,否则,执行S415;
S414、判定不合法;
S415,校验所述模型状态集中是否存在与所述迁移事件的迁出状态适配的终极状态,若存在,则判定合法,否则,则判定不合法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110125085.6A CN112860354B (zh) | 2021-01-29 | 2021-01-29 | 一种基于Laravel框架的状态机的建模方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110125085.6A CN112860354B (zh) | 2021-01-29 | 2021-01-29 | 一种基于Laravel框架的状态机的建模方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112860354A true CN112860354A (zh) | 2021-05-28 |
CN112860354B CN112860354B (zh) | 2022-05-17 |
Family
ID=75986787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110125085.6A Active CN112860354B (zh) | 2021-01-29 | 2021-01-29 | 一种基于Laravel框架的状态机的建模方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112860354B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114879642A (zh) * | 2022-05-23 | 2022-08-09 | 重庆邮电大学 | 一种用于车载空调控制器的功能模式状态的管理方法 |
CN116977048A (zh) * | 2023-09-25 | 2023-10-31 | 天津金城银行股份有限公司 | 状态机系统、交易状态管理方法及银行交易系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1012731A1 (en) * | 1996-08-12 | 2000-06-28 | ADC NewNet, Inc. | Dynamically modifiable call processing methods and apparatus |
CN101201753A (zh) * | 2007-12-13 | 2008-06-18 | 浪潮通信信息系统有限公司 | 一种多状态机管理引擎的配置管理方法 |
CN106502770A (zh) * | 2015-09-07 | 2017-03-15 | 上海畅星软件有限公司 | 一种基于有限状态机的hmi状态迁移方法 |
CN106528169A (zh) * | 2016-11-25 | 2017-03-22 | 浙江工业大学 | 一种基于AnGo动态演化模型的Web系统开发可复用方法 |
-
2021
- 2021-01-29 CN CN202110125085.6A patent/CN112860354B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1012731A1 (en) * | 1996-08-12 | 2000-06-28 | ADC NewNet, Inc. | Dynamically modifiable call processing methods and apparatus |
CN101201753A (zh) * | 2007-12-13 | 2008-06-18 | 浪潮通信信息系统有限公司 | 一种多状态机管理引擎的配置管理方法 |
CN106502770A (zh) * | 2015-09-07 | 2017-03-15 | 上海畅星软件有限公司 | 一种基于有限状态机的hmi状态迁移方法 |
CN106528169A (zh) * | 2016-11-25 | 2017-03-22 | 浙江工业大学 | 一种基于AnGo动态演化模型的Web系统开发可复用方法 |
Non-Patent Citations (1)
Title |
---|
WEIXIN_30266829: "《有限状态机与应用一例》", 《HTTPS://BLOG.CSDN.NET/WEIXIN_30266829/ARTICLE/DETAILS/98492882》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114879642A (zh) * | 2022-05-23 | 2022-08-09 | 重庆邮电大学 | 一种用于车载空调控制器的功能模式状态的管理方法 |
CN116977048A (zh) * | 2023-09-25 | 2023-10-31 | 天津金城银行股份有限公司 | 状态机系统、交易状态管理方法及银行交易系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112860354B (zh) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6704743B1 (en) | Selective inheritance of object parameters in object-oriented computer environment | |
US6385769B1 (en) | Text based object oriented program code with a visual program builder and parser support for predetermined and not predetermined formats | |
JP2843763B2 (ja) | オブジェクト指向コンピュータ・システムにおけるインタフェース方法及び装置 | |
US6633888B1 (en) | Method and apparatus for visually creating and testing object oriented components | |
US5677997A (en) | Method and apparatus for automated conformance and enforcement of behavior in application processing systems | |
US5535389A (en) | Business process objects with associated attributes such as version identifier | |
EP0686285B1 (en) | Model information control system | |
JP2680255B2 (ja) | オブジェクト指向環境においてデータを転送するためのシステム及び方法 | |
EP1582985B1 (en) | Test case inheritance controlled via attributes | |
US20030149799A1 (en) | System supporting unified event handling in ECMAScript | |
US8141035B2 (en) | Method for accessing internal states of objects in object oriented programming | |
EP1139216A2 (en) | Web application development system | |
CN112860354B (zh) | 一种基于Laravel框架的状态机的建模方法及终端 | |
US8479150B2 (en) | Compositional modeling of integrated systems using event-based legacy applications | |
KR101098603B1 (ko) | 원격 경계를 가로질러 컴퓨터 판독가능한 객체들을전달하기 위한 시스템 및 방법 | |
CN101091160A (zh) | 管理工具环境 | |
JPH1040087A (ja) | ソフトウェア工学で使われるデータモデルの取り扱い方法 | |
JPH04230543A (ja) | オブジェクト指向環境においてオブジェクトを処理する方法 | |
CN101073057A (zh) | 向命令行指令提供扩展功能的机制 | |
US6766457B1 (en) | Method for controlling access to a multiplicity of objects using a customizable object-oriented access control hook | |
CN114064213A (zh) | 基于Kubernets容器环境的快速编排服务方法及系统 | |
CN111880804A (zh) | 应用程序代码的处理方法及装置 | |
US6446087B1 (en) | System for maintaining the integrity of application data | |
US7966562B1 (en) | System and method for providing domain-sensitive help | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |