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
	}
}

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

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

相关推荐
考虑考虑3 天前
nohup启动java程序
后端·自动化运维
东莞市云毅网络有限公司3 天前
PDF 表格抽取的三条技术路线对比:规则、库解析与版面识别
python·sqlite·自动化运维·geo·数据监测
东莞市云毅网络有限公司6 天前
用标准库做网页正文抽取:从 HTML 到结构化字段的轻量实现
python·sqlite·自动化运维·geo·数据监测
考虑考虑7 天前
docker compose V2版本新属性
运维·后端·自动化运维
东莞市云毅网络有限公司9 天前
用 SQLite FTS5 给企业知识库做问答检索原型:中文二元切分与 BM25 排序
python·sqlite·自动化运维·geo·数据监测
考虑考虑10 天前
cmd局部设置java变量
运维·后端·自动化运维
宋均浩11 天前
重跑率 31% → 6%,变更失败率 12% → 4%:CI/CD 流水线治理实战的 5 个配置
ci/cd·自动化运维·devops
考虑考虑12 天前
docker compose环境变量替换
运维·后端·自动化运维
程序员老刘12 天前
Dart Skills CLI 1.0发布,老刘年初的预言兑现了
flutter·ai编程·dart
本尊粥12 天前
网站一改版自动化脚本就废?聊聊自愈回放的完整设计
自动化运维