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

##状态机
什么叫状态机(Finite State Machine),书面上的解释可以自己借助搜索引擎寻找到。通俗地来讲是一个状态定义、查找、切换和事件派发等一系列的代码的集合。与之对应的设计模式叫状态机模式,常用于游戏编程,而在工作流的应用中也会用到。 在工作流中,我们经常会有一系列的步骤:步骤1、步骤2、步骤3、步骤4。我们首先需要定义出这些步骤,再定义这些步骤切换的条件,在客户端的话,一般是某些条件验证通过,可以是字段,也可以是一些接口,还有就是前一个步骤的完成情况。 ##工作流
我们要完成一项较复杂的工作,通常需要多个步骤,而且这些步骤也会有先决条件与流向控制,这种实际业务就是工作流。 ##小应用
比如我们要进行一个报销的审批,有几个步骤:开始,职工提交报销、项目经理审核,总监审核,财务审批,补充资料。 业务是:**流程是按照顺序走的,在财务未审批之前,可以补充资料,只是补充了资料就要从新从项目经理开始审批。** 我们在传统的代码中,如果要把上述的状态都写在一起,肯定要有很多的if else条件判断。这时候就可以利用状态机把这些内容抽象出来,形成分离度高,复用性好,易懂的代码。 在google中搜索 `javascript finite state machine`,第一个结果是在github上的代码,我拿来做示范了,详情点击[demo](http://gh.p2227.com/demo/fsm/)查看吧,还是用代码好说话。 ![简单状态机demo](https://images0.cnblogs.com/blog/84053/201408/232349419241810.jpg) ##后记
* 当然我们要做的事情不可能是一个纯前端就能完成的,前端只是保证用户在正常使用软件的情况下有正确的输入。
* 状态机在使用过程中会有很多复杂的情况,这就要看封装代码的强大性了,比如上述状态机就不支持子状态。

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

  1. JavaScript状态机程序逻辑编辑器

    制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦 ...

  2. javascript和swf在网页中交互的一些总结

    Javascript和swf在网页中交互一般可有以下几种情况: 1.swf和这些调用的javascript在同域 2.swf和这些调用的javascript在不同域,比如加载远程的swf然后call别 ...

  3. 【转】SharePoint工作流中常用的方法

    SharePoint中使用工作流对象模型. SharePoint工作流对象模型在Microsoft.SharePoint.Workflow命名空间.你可以利用此对象模型对你的工作流进行编程.你可以启动 ...

  4. Javascript系列之在HTML中使用JavaScript

    本文主要包括以下几方面内容: 1)使用<script>元素 2)嵌入脚本和外部脚本 3)文档模式对JavaScript的影响 4)考虑禁用JavaScript的场景 只要一提到把Javas ...

  5. JavaScript基础:数据类型的中的那些少见多怪

    原文:JavaScript基础:数据类型的中的那些少见多怪 Javascript共有6种数据类型,其中包括3个基本数据类型(string,number,boolean).2个特殊数据类型(undefi ...

  6. JavaScript 最终将在编程语言中占统治地位?

    JavaScript 最终将在编程语言中占统治地位? JavaScript 现在是大多数开发者都会使用的编程语言.网络效应会推动它成为有史以来第一个真正占统治地位的编程语言吗? 大约十年前,编程的方式 ...

  7. 第14章 添加JavaScript客户端 - Identity Server 4 中文文档(v1.0.0)

    本快速入门将展示如何构建基于浏览器的JavaScript客户端应用程序(有时称为" SPA "). 用户将登录IdentityServer,使用IdentityServer发出的访 ...

  8. JavaScript 的setTimeout 和Angular中的$timeout的區別

    JavaScript中setTimeout返回值类型和意义说明: 1.setTimeout :暂停指定的毫秒数后执行指定的代码,返回值是id标识,这个id的意义就是通过clearTimeout来清理暂 ...

  9. JavaScript权威指南--WEB浏览器中的javascript

    知识要点 1.客户端javascript window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用window表示来引用它.window ...

随机推荐

  1. [Python][小知识][NO.3] Python 使用系统默认浏览器打开指定URL的网址

    1.前言 一般用到的地方: GUI交互界面下,单击某个按钮实现打开指定网址. 某帮助菜单项目,需要跳转网页显示时. O.O 某XX程序,需要植入网页弹窗广告时... 2.方法 调用 webbrowse ...

  2. SQL Agent Job 报“Access to the remote server is denied because the current security context is not trusted”

    SQL Server 2005(Microsoft SQL Server 2005 - 9.00.5000.00)下的一个作业执行一个存储过程,存储过程中动态SQL语句使用链接服务器(Linked S ...

  3. Powershell远程执行命令

    $Username = 'xx' $Password = 'xx' $ComputerName='xx' $pass = ConvertTo-SecureString -AsPlainText $Pa ...

  4. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

  5. C# DBHelper类 参考

    using System;using System.Collections.Generic;using System.Text;using System.Configuration;using Sys ...

  6. c/c++ 标准库 bind 函数 详解

    标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...

  7. Call to a member function display() on a non-object问题的解决

    在使用ThinkPHP做项目的时候,出现了如下 的报错: 报错是Call to a member function display() on a non-object.我的代码是: 查看了ThinkP ...

  8. 4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析

    目录 目录 前言 (一)总框架分析 (二)函数式的绘图 1.说明: 2.函数绘图的缺优点 3.绘图类的函数 4.操作类的函数 5.例子: (三)面向对象式的绘图 1.基本概念 2.基本对象 3.面向对 ...

  9. Understanding Docker

    What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发,方便部署和方便执行应用.使用docker可以快速分发开发好的应用.借助于Docker,你可以将开发平台 和应用分 ...

  10. Vue项目使用webstorm开发 保存浏览器不自动更新问题

    1.首先进去编辑器的设置页面 2.按照以下步骤进行操作,把如下选项的√去掉即可: