Dart 自动化流程引擎的完成

具体的完成我还没有想好,可是全体有一个大概的核心思路。这个自动化流程引擎其实便是想做Dart版别的Fastlane。

Dart 自动化流程引擎的完成

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

流程节点

Dart 自动化流程引擎的完成

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

这个流程节点我首要考虑不光支撑Dart程序还能够支撑其他的程序,只需能依照约定将数据存放在本地的Local Data里边。

上图的流程节点都是没有逻辑分叉,这个在我的规划里边是支撑逻辑分叉的,开端的初期能够先不必考虑。

流程节点的完成在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,比方下面。

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

这样引擎解析之后将所需求恳求的值从对应的里边获取,之后给对应插件运转。

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