Dart 自动化流程引擎的实现

Dart 自动化流程引擎的实现

具体的实现我还没有想好,但是整体有一个大概的核心思路。这个自动化流程引擎其实就是想做Dart版本的Fastlane。

上图是自动化流程引擎大致的技术架构图,下面我来仔细的进行说明一下。

流程节点

代表流程中的不同的节点,分别是有执行程序构成。也就是Fastlane所谓的Action,后续我也会偏向于这方便的设计。

这个流程节点我主要考虑不但支持Dart程序还可以支持其他的程序,只要能按照约定将数据存放在本地的Local Data里面。

上图的流程节点都是没有逻辑分叉,这个在我的规划里面是支持逻辑分叉的,开始的初期可以先不用考虑。

流程节点的实现在Dart层次主要是通过命令行的方式,这样自由度高,也是之前已经实现过一部分,具有一定的参考性。

dart 复制代码
Future<void> main(List<String> args) async {
	final identifier = args.first;
  final resouce = ChannelResouce.fromIdentifier(identifier);
  final request = await resouce.loadRequest();
  final response = await run(request);
  await resouce.saveResponse(response);
}

Future<ChannelResponse> run(ChannelRequest request) async {
	// 实现的逻辑
	return ChannelResponse.success(data);// 返回对应的数据
}

上面是一个大致的代码,不是真正实现的部分。我们只提供一个标准的run函数给开发插件的开发者。上面调用和保存结果到本地系统实现。

我们通过标准文件的读取和写入来实现不同程序之间的数据交互,这样就十分的可以扩展。如果你不想用Dart实现,比如你想用Shell,或者用Fastlane或者其他语言。只要你运行能将标准的输入和输出就可以。

这样实现插件的逻辑自由度很高,也可以将目前已有的功能进行迁移。

数据共享

整体是一个流程,这中间一定有数据共享的部分。关于数据共享我主要分位了三个层次。

  1. 环境变量,这个来源于当前运行期间系统自由的,或者比如Shell脚本进行设置。
  2. Map 这个主要是在Dart运行期间,可能需要一些环境值,不能直接操作,就通过Map进行存储。
  3. 本地文件 因为每一个插件都有输入和输出文件生成,那么后续的插件可以根据ID或者什么值拿到对应插件的输入和输出里面的值进行调用。

运行脚本

我打算将整个流程保存下面为一个可读的JSON,比如下面。

json 复制代码
{
	"name": "流程1",
	"request": {
		"path": "$ENV[PATH]",
		"id": "$DATA[流程1][ID]"
	},
 	"response": {
  	"code": xxxxx-xxxxx
	}
}

这样引擎解析之后将所需要请求的值从对应的里面获取,之后给对应插件运行。

这篇文章就先写到这里,后续根据具体的开发再细微的进行调整。

相关推荐
SkyWalking中文站17 小时前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
说了很好3 天前
基于有限状态机的模块化 PLC 多色物料分拣容错控制系统设计
自动化运维
说了很好4 天前
工业通用 PLC 分拣模板!传感器去抖 + 气缸互锁 + 状态机 + 超时报警全套
自动化运维
SelectDB10 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
小林ixn10 天前
别再手写Prompt了!用AI Loop实现自动化自我迭代,效率提升10倍
人工智能·自动化运维
用户5569188175310 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
怕浪猫11 天前
Playwright 的 CDP Session 机制详解
浏览器·ai编程·自动化运维
kyriewen16 天前
从本地到生产:迁移到 GitHub Actions 自动化 CI/CD,总结了这 5 个坑
前端·github·自动化运维
凤炎忻23 天前
【GitHub】GitHub Actions 快速入门
github·自动化运维