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

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

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

相关推荐
空中海13 小时前
2.7 列表与滚动性能优化
flutter·性能优化·dart
空中海14 小时前
2.4 绘制与动画
flutter·dart
空中海14 小时前
2.6 表单与输入处理
flutter·dart
空中海20 小时前
1.1 Flutter 简介与架构原理
flutter·dart
空中海21 小时前
1.3 Dart 核心语言特性
flutter·dart
空中海21 小时前
2.5 手势识别与交互系统
flutter·交互·dart
空中海1 天前
2.1 Widget 基础
flutter·dart
DigitalOcean4 天前
拒绝 GPU 集群资源浪费:教你打造自动化降本的 AI 运维 Agent
agent·自动化运维
Code-Porter9 天前
记录关于Flutter ObjectBox数据库使用ObjectBoxBrowser插件,在同一个局域网内电脑无法访问查看数据问题
android·数据库·flutter·dart
亿牛云爬虫专家9 天前
AIGC数据引擎的基石:图库抓取架构从单机到云原生的演进与实战
云原生·aigc·爬虫代理·自动化运维·数据抓取·图库·数据引擎