javascript状态机及在工作流中的应用

#javascript状态机及在工作流中的应用

##状态机
什么叫状态机(Finite State Machine),书面上的解释可以自己借助搜索引擎寻找到。通俗地来讲是一个状态定义、查找、切换和事件派发等一系列的代码的集合。与之对应的设计模式叫状态机模式,常用于游戏编程,而在工作流的应用中也会用到。

在工作流中,我们经常会有一系列的步骤:步骤1、步骤2、步骤3、步骤4。我们首先需要定义出这些步骤,再定义这些步骤切换的条件,在客户端的话,一般是某些条件验证通过,可以是字段,也可以是一些接口,还有就是前一个步骤的完成情况。

##工作流
我们要完成一项较复杂的工作,通常需要多个步骤,而且这些步骤也会有先决条件与流向控制,这种实际业务就是工作流。

##小应用
比如我们要进行一个报销的审批,有几个步骤:开始,职工提交报销、项目经理审核,总监审核,财务审批,补充资料。

业务是:**流程是按照顺序走的,在财务未审批之前,可以补充资料,只是补充了资料就要从新从项目经理开始审批。**

我们在传统的代码中,如果要把上述的状态都写在一起,肯定要有很多的if else条件判断。这时候就可以利用状态机把这些内容抽象出来,形成分离度高,复用性好,易懂的代码。

在google中搜索 `javascript finite state machine`,第一个结果是在github上的代码,我拿来做示范了,详情点击[demo](http://gh.p2227.com/demo/fsm/)查看吧,还是用代码好说话。

![简单状态机demo](http://images.cnitblog.com/blog/84053/201408/232349419241810.jpg)

##后记
* 当然我们要做的事情不可能是一个纯前端就能完成的,前端只是保证用户在正常使用软件的情况下有正确的输入。
* 状态机在使用过程中会有很多复杂的情况,这就要看封装代码的强大性了,比如上述状态机就不支持子状态。
时间: 2024-11-05 12:37:50

javascript状态机及在工作流中的应用的相关文章

JavaScript状态机程序逻辑编辑器

制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦,还要考虑不同XAML页面返回事件的名称.所以就写了个状态机模型的程序制作工具. 技术支持 说到制作状态机,无疑微软的VS是最强大的,微软本身就有Workflow.使用微软的工作流就可以很方便的制作出一个状态机,然后在用System.Workflow下的类库提取,整理结构,然后生成JavaScrip

JavaScript - 简介、在HTMl中使用JavaScript、基本概念

1. JavaScript简介 JavaScript历史回顾 JavaScript是什么 JavaScript与ECMAScript的关系 JavaScript的不同版本 一言概之,略. 2. 在HTML中使用JavaScript 要把JavaScript放到网页中,就得涉及Web的核心语言 -- HTML.当初开发JavaScript的时候,要解决的一个重要问题就是让JavaScript与HTML页面共存,并且不影响页面在浏览器中的呈现效果.最终决定为Web增加统一的脚本支持. 2.1 <sc

用javascript技术读取注册表中软件安装位置并启动本地软件

1.首先读取注册表中本地软件安装的位置,如果未安装则无就跳转到下载页面. 2.启动软件,关闭页面. 3.如报错提示. <SCRIPT language=javascript>  <!--   function killErrors(){  alert("请将您浏览器Internet选项中的“对没有标记为安全的ActiveX控件进行初始化和脚本运行”设置为“启用”!/n/n然后刷新本页登陆!");  return true;}   window.onerror = ki

javascript获取对象直接量中的属性和属性值

javascript获取对象直接量中的属性和属性值:所谓的对象直接量简单来说就是,由大括号包裹的键值对列表,例如: var antzone={ webName:"蚂蚁部落", address:"青岛市南区", age:2 } 下面介绍一下如何获取对象直接量中的属性和属性值,代码如下: var antzone={ webName:"蚂蚁部落", address:"青岛市南区", age:2 } for(var prop in a

JavaScript实现在文本框中输入空格时自动填写某个值

<script language="javascript" type="text/javascript"> var txtText4 = "#" + '<%= new DynamicControl(this, "Text4").ClientID%>'; $(function () { $(txtText4).keyup(function (e) { if (e.which == 32) $(this).

Javascript RegExp对象---获取url中某一个参数的值

RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes实例:window.location.href:http://localhost:8100/aspx/main/ServiceCenter_list.aspx?category_id=93&page=2要匹配到的category_id=93:/category_id=\d+/g 创建 RegExp 对象的语法: new RegExp(pattern, at

javascript如何随机输出数组中的内容

javascript如何随机输出数组中的内容: 有时候我们可能需要从数组中随机抽出一项内容,下面就通过一段代码实例介绍一下如何实现此效果. 代码如下: <script type="text/JavaScript"> var theArray=new Array(); theArray[0]="蚂蚁部落"; theArray[1]="蚂蚁部落一"; theArray[2]="蚂蚁部落二"; theArray[3]=&

每天一个JavaScript实例-从js脚本中访问object元素中的SVG

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-从js脚本中访问object元素中的SVG</title> <style> </style> </head> &l

状态机思路在程序设计中的应用

状态机思路在程序设计中的应用 作者: 张俊  发布时间: 2015-09-13 12:20  阅读: 1314 次  推荐: 3   [收藏] 状态机的概念 状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然有状态机的身影浮现. 比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态,再触发另一个键后切换到C状态,或者返回到A状态.这就是最简单的按键状态机例子.实际的按键解析程序会比这更复杂些,但这不影