Dart 自动化流程引擎的完成
具体的完成我还没有想好,可是全体有一个大概的核心思路。这个自动化流程引擎其实便是想做Dart版别的Fastlane。
上图是自动化流程引擎大致的技能架构图,下面我来细心的进行阐明一下。
流程节点
代表流程中的不同的节点,分别是有执行程序构成。也便是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或许其他语言。只需你运转能将标准的输入和输出就能够。
这样完成插件的逻辑自在度很高,也能够将现在已有的功能进行迁移。
数据同享
全体是一个流程,这中间必定有数据同享的部分。关于数据同享我首要分位了三个层次。
- 环境变量,这个来源于当时运转期间体系自在的,或许比方Shell脚本进行设置。
- Map 这个首要是在Dart运转期间,可能需求一些环境值,不能直接操作,就经过Map进行存储。
- 本地文件 因为每一个插件都有输入和输出文件生成,那么后续的插件能够根据ID或许什么值拿到对应插件的输入和输出里边的值进行调用。
运转脚本
我打算将整个流程保存下面为一个可读的JSON,比方下面。
{
"name": "流程1",
"request": {
"path": "$ENV[PATH]",
"id": "$DATA[流程1][ID]"
},
"response": {
"code": xxxxx-xxxxx
}
}
这样引擎解析之后将所需求恳求的值从对应的里边获取,之后给对应插件运转。
这篇文章就先写到这里,后续根据具体的开发再细微的进行调整。