00:00
大家好,我是于皮。今天我将用一个有趣的小例子来带大家入门企业开发中非常实用的技术工作流。如果你是一名开发者,一定要学习一下它。工作流顾名思义就是一系列工作所组成的流程,对应到编程领域呢,就是一系列程序按设定好的流程自动执行。比如我现在要做一个养鸡系统,每一只鸡都需要依次通过唱、跳、rap、篮球,并且还要练习时长两年半才能出售,否则就是菜鸡。那如果让你来写代码,实现制的逻辑,你会怎么写呢?想必会是一大段的if else吧。对于简单的程序来说,这样写没有问题,但企业开发中我们的业务流程往往是非常复杂的,大家都在移动文件里写if else也不现实,对吧?所以为了更好的开发和维护工作流,我们一般会使用工作流引擎技术,可以通过可视化拖拽的方式来绘制流程图,并自动生成业务流程代码,而不用自己写if。
01:00
大幅降低开发成本。比较成熟的工作流引擎有activity flow engine等等,但他们都需要一些学习成本,所以这次我选了一个相对清亮纯净的工作流引擎compare flow来演示,便于大家理解。下面我们就用它来实现刚刚提到的养鸡系统。使用compare flow非常简单,直接引入代码包即可。这里呢,我建议大家首次使用时下载官方提供的示例代码。这是一个ma加spring BOO的项目,让我们用idea开发工具打开它,可以看到目录中有很多BPM业务流程管理文件,这些文件是用来定义我们的工作流。但是呢,这玩意儿是用XML写的,看着就很复杂,你说自己写的这玩意儿还真的不如写if elseson呢是吧?所以我们要先下载一个compare flow designer插件,这样就能可视化的编辑工作流了,让我们在资源目录下新建一个BPM文件,就叫基点BPM,然后切换到可视化编辑视图,在。
02:00
这里我们就能像画流程图一样设计我们的程序流程了。让我们试着复现一下之前画的流程图。设计器左边的内容称为节点,每个流程图必须包含一个开始和一个结束节点,不同的节点可以有不同的流程控制规则,比如判断、循环等等。节点又可以指向其他节点,表示工作的执行顺序。双击节点可以编辑节点名称。一番操作后,我们的流程图就变成了这个样子。但目前这个流程图是静态的,我们还需要给它绑定数据和程序代码。我们首先要确定整个流程的输入和输出,此处我们的输入就是机,输出就是布尔类型。我们把这些信息叫做工作流的上下文,可以理解为全局变量,工作流的每个节点都可以读取这些数据。双击空白处就可以配置上下文。这里我们要注意ino ta的填写,全局入参为per,全局返回值为return。如果你需要在部分节点中传递。
03:00
及变量可以用inner类型。配置好上下文后,我们要给每个节点绑定一个方法。这里我们从之前的if else程序中提取出需要的方法,比如check check、跳考核成功、考核失败等。然后双击流程图的节点,点击行为配置,选择我们方法所属的类和方法,然后配置输入参数和返回值。这里我们的输入参数从上下文中获取,而返回值呢,也要同步给上下文。现在虽然知道每个节点做什么事了,但是我们还不知道流程具体要走哪条路,所以我们还要再给判断节点绑定条件来区分yes or no,单击流程箭头,然后输入表达式,如种表达式成立,那么会往下执行,还可以配置优先级来选择判断顺序。至此,我们的流程图就编辑完了。然后我们就可以在代码中执行流程。比如我这里新建一个main方法,你用一只鸡作为输入参数放到流程上下文中,然后调用流程引擎的start方法就能得到。
04:00
结果了,让我们运行一下试试看,可以看到我们的方法是按照预期的顺序执行的,这说明我们的程序没有bug大中造成了。那以上就是工作流引擎的用法,由于这个例子比较简单,可能无法突出工作流引擎的优势,大家如果感兴趣的话,也可以试着完成DEMO项目中更复杂的例子,感受工作流引擎开发的高效。工作流引擎的原理其实也很简单,就是将视图文件编译为Java代码,比如张张的养机流,我们可以看到全局变量流程就一大堆if f啊,大家也可以试着自己写的流程引擎应该会是简历上的加分项。最后补充一句啊,这叫computer flow,这个工作流引擎呢,其实好久没有更新了,那如果你想系统的学习工作流,我还是更推荐activity等更成熟的引擎,那以上就是本期分享学会的朋友们点个赞吧,今后如果大家忘了什么是工作流,就想想唱跳rap篮球。
我来说两句