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

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

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

相关推荐
pengyu7 天前
系统化掌握Dart编程之面向对象的抽象类及混入
android·flutter·dart
捡芝麻丢西瓜9 天前
flutter自学笔记8- package、插件、主题、国际化
flutter·dart
好的佩奇9 天前
Dart 之空安全
flutter·dart
飞川撸码9 天前
flutter 装饰类【BoxDecoration】
flutter·android-studio·dart
pengyu9 天前
系统化掌握Dart编程之面向对象分析
android·flutter·dart
刘大猫269 天前
windows server2016搭建AD域服务器
人工智能·云计算·自动化运维
pengyu10 天前
系统化掌握Dart编程之面向对象基本概念
android·flutter·dart
low神18 天前
Flutter面试题、Dart面试题
前端·javascript·flutter·react native·dart·前端面试题
ygria19 天前
Automa详解:浏览器行为自动化和我的使用
自动化运维
西辰Knight20 天前
【Flutter入门】2. 快速掌握Dart语言 - 从 Java、JavaScript 转型必看
flutter·dart