业务可视化-让你的流程图“Run“起来(4.实际业务场景测试)

本文通过酒店预定流程示例,展示了如何使用ladybugflow实现业务流程的可视化和分离,使得流程图修改无需改动业务逻辑。通过实例演示了流程图的绘制、Json文件生成、业务方法编写及分支处理,强调了简化流程节点的方法。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

前言

首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(3.分支选择&跨语言分布式运行节点)]的支持。

下面我以实际业务场景为例,来介绍一下ladybugflow的使用方法。

酒店预定场景(传统写法)

对于下面的酒店预定流程

流程1:

流程2

[流程1]的传统写法1:

定义流程间共享变量;
开始处理();

查询客户信息处理();
查询酒店信息处理();

下单处理();
下单成功处理();

假设每个流程用3秒钟,整个流程执行完需要3*5=15秒。

于是衍生出了写法2:

定义流程间共享变量;
开始处理();

启动 查询客户信息线程处理 A;
启动 查询酒店信息线程处理 B;
等待A,B结束;

下单处理();
下单成功处理();

节省了时间,但各种多线程的实现方式使程序变得复杂,

而且上述写法都把流程图与业务逻辑进行了绑定

也就是流程图中添加,删除节点后,相应的逻辑代码也要修改,测试范围往往是整个流程图的业务逻辑都要进行测试。

酒店预定场景(新写法)

针对上面的问题,我在设计ladybugflow的时候,把流程图和业务逻辑进行了分离

每个业务逻辑对应一个方法,与流程图中的节点进行绑定。

这样修改流程图就不用修改业务逻辑了。

而且流程图可以通过工具拖拽方式生成,还可以在图上查看运行结果。

下面介绍一下ladybugflow中的开发过程

1. 导入依赖

Maven

<dependency>
    <groupId>io.github.nobugladygroupId>
    <artifactId>ladybugflowartifactId>
    <version>0.0.6version>
dependency>
Gradle
// https://mvnrepository.com/artifact/io.github.nobuglady/ladybugflow
implementation 'io.github.nobuglady:ladybugflow:0.0.6'

2. 画流程图,并且生成Json文件

首先把这个文件下载到本地,用浏览器打开

https://github.com/nobuglady/ladybugflow/blob/main/html/network.html

然后点击页面上的[edit]按钮可以画流程图,

画完流程图后,点击[update json]按钮,可以生成流程图对应的json文件。

3. 写业务方法

流程图的每个节点对应下面的一个方法,用@Node注解来关联流程图。

可以用类变量进行参数传递和表示结果,比如下单成功后,设置类变量为"success"。

注:建议用节点ID进行关联,本文为了看起来方便,选择了中文的节点名称进行关联

Flow1.java(注意文件编码为UTF-8)


/**
 * 
 * @author NoBugLady
 *
 */
public class Flow1 extends FlowRunner {

	private String result;
	
	public String getResult() {
		return result;
	}
	
	@Node(label = "start")
	public void processStart() throws InterruptedException {
		System.out.println("启动开始 (模拟业务等待3秒)");
		Thread.sleep(3000);
		System.out.println("启动结束");
	}

	@Node(label = "查询用户信息")
	public void processSearchUser() throws InterruptedException {
		System.out.println("查询用户信息开始 (模拟业务等待3秒)");
		Thread.sleep(3000);
		System.out.println("查询用户信息结束");
	}

	@Node(label = "查询酒店信息")
	public void processSearchHotel() throws InterruptedException {
		System.out.println("查询酒店信息开始 (模拟业务等待3秒)");
		Thread.sleep(3000);
		System.out.println("查询酒店信息结束");
	}

	@Node(label = "下单")
	public void processOrder() throws InterruptedException {
		System.out.println("下单开始 (模拟业务等待3秒)");
		Thread.sleep(3000);
		System.out.println("下单结束");
	}

	@Node(label = "下单成功")
	public void processSuccess() throws InterruptedException {
		System.out.println("下单成功开始 (模拟业务等待3秒)");
		Thread.sleep(3000);
		System.out.println("下单成功结束");
		result = "success";
	}
}折叠 

4. 将流程图的Json文件放入工程

Flow1.json(注意文件编码为UTF-8)

{
	"flowId": "your flow id",
	"nodes": [
		{
			"id": "1",
			"label": "start"
		},
		{
			"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
			"label": "查询用户信息",
			"readyCheck": 0
		},
		{
			"id": "1a90a997-4390-470a-ae7c-626a725438d2",
			"label": "查询酒店信息",
			"readyCheck": 0
		},
		{
			"id": "52289e99-363d-4453-8077-ca8bdc6d35bf",
			"label": "下单",
			"readyCheck": 0
		},
		{
			"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
			"label": "下单成功",
			"readyCheck": 0
		}
	],
	"edges": [
		{
			"id": "1",
			"from": "1",
			"to": "2",
			"arrows": "to"
		},
		{
			"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4",
			"from": "1",
			"to": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
			"arrows": "to"
		},
		{
			"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7",
			"from": "1",
			"to": "1a90a997-4390-470a-ae7c-626a725438d2",
			"arrows": "to"
		},
		{
			"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c",
			"from": "1a90a997-4390-470a-ae7c-626a725438d2",
			"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
			"arrows": "to"
		},
		{
			"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37",
			"from": "52289e99-363d-4453-8077-ca8bdc6d35bf",
			"to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
			"arrows": "to"
		},
		{
			"id": "19f2f329-8163-4dc6-a353-800df79d18a6",
			"from": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
			"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
			"arrows": "to"
		}
	]
}折叠 

项目结构如下图所示

Flow1.java和Flow1.json需要放到同一个包下。

5. 启动流程

App1.java(注意文件编码为UTF-8)

/**
 * 
 * @author NoBugLady
 *
 */
public class App1 {

	public static void main(String[] args) {
		
		Flow1 testFlow = new Flow1();
		testFlow.startFlow(true);
		
		System.out.println(testFlow.getResult());
		
		// 不建议每次都调用shutdown,可以在整个App关闭的时候调用一次shutdown
		FlowStarter.shutdown();
		
	}
}

6. 查看运行结果

[I]2022/07/27 21:23:12.172  main:ladybugflow.properties in root path not found, use default configuration
[I]2022/07/27 21:23:12.177  main:NodePool started.
[I]2022/07/27 21:23:12.178  main:Ready queue consumer thread started.
[I]2022/07/27 21:23:12.180  main:Complete queue consumer thread started.
[I]2022/07/27 21:23:12.993 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] main:json:
{"flowId":"your flow id","nodes":[{"id":"1","label":"start","readyCheck":0},{"id":"a1a38c2e-0e05-4c68-bd49-f12aea070876","label":"查询用户信息","readyCheck":0},{"id":"1a90a997-4390-470a-ae7c-626a725438d2","label":"查询酒店信息","readyCheck":0},{"id":"52289e99-363d-4453-8077-ca8bdc6d35bf","label":"下单","readyCheck":0},{"id":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label":"下单成功","readyCheck":0}],"edges":[{"id":"1","from":"1","to":"2","condition":null,"arrows":"to"},{"id":"b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from":"1","to":"a1a38c2e-0e05-4c68-bd49-f12aea070876","condition":null,"arrows":"to"},{"id":"001375c7-19e7-436b-bbcd-68e36c8f23b7","from":"1","to":"1a90a997-4390-470a-ae7c-626a725438d2","condition":null,"arrows":"to"},{"id":"dd830043-c7a7-4c71-b91c-10c007b7b19c","from":"1a90a997-4390-470a-ae7c-626a725438d2","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from":"52289e99-363d-4453-8077-ca8bdc6d35bf","to":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","condition":null,"arrows":"to"},{"id":"19f2f329-8163-4dc6-a353-800df79d18a6","from":"a1a38c2e-0e05-4c68
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值