轻流:用 YAML 风格文本表达串行/并行流程

news/2026/1/26 23:04:22/文章来源:https://www.cnblogs.com/huntdream/p/19535836

轻流:用 YAML 风格文本表达串行/并行流程

为什么需要“轻流”?

在日常开发中,我们经常需要描述一段执行顺序明确、结构简单的流程:

“先校验权限,然后并行下载文件和加载配置,接着处理数据,最后同时写入结果并上报指标。”

这类逻辑通常出现在自动化脚本、服务编排、CI/CD 步骤或内部工具中。但若为此引入 BPMN 图形建模,成本过高;若仅用代码硬编码,又难以配置化与可视化。

“轻流”应运而生:它用 YAML 风格的纯文本,仅通过 series(串行)和 parallel(并行)两个关键字,清晰表达上述流程——无需图形、无需复杂语法,一行配置即是一张流程图。

直观效果示例(带注释)

series:                       # 整个流程是串行执行(从上到下)- check_permission          # 第1步:校验权限(单任务)- parallel:                 # 第2步:并行执行以下两个子任务(同时开始)- download_source       #   ↳ 子任务A:下载源文件- load_config           #   ↳ 子任务B:加载配置- transform_data            # 第3步:转换数据(等并行任务全部完成后执行)- parallel:                 # 第4步:再次并行执行输出与监控- write_output          #   ↳ 子任务A:写入输出文件- emit_metrics          #   ↳ 子任务B:上报指标

✅ 一眼看懂:

  • 缩进层级 = 执行层级
  • series 下的任务按顺序执行
  • parallel 下的任务并发执行
  • 并行块整体视为“一个步骤”,完成后才进入下一步

1. 文本流程语法(YAML 风格 / 格式化的 json )

使用 seriesparallel 关键字 + 子节点数组定义流程结构。

  • 叶子节点:字符串(任务标识)
    • 具体放什么内容,可视情况需要来定
    • 比如:前期交流表达流程时,就可以是很宽松的文本
    • 比如:想要表达更格式化的信息,可以 $id:$name:$desc
  • 容器节点:含 seriesparallel 字段的对象,值为子节点列表
  • 支持任意层级嵌套

示例

简单串行

series:- validate    # 第一步- process     # 第二步(validate 完成后执行)- save        # 第三步(process 完成后执行)

并行执行

parallel:- send_email    # 三个任务同时开始- update_cache- log_event

嵌套混合

series:- auth                    # 先认证- parallel:               # 再并行获取用户和角色信息- fetch_user- fetch_role- render                  # 等两者都完成后渲染页面

2. Java 模型定义(其它类似)

所有节点统一实现空标记接口 TxtNode,明确其“流程节点”职责。

// 标记接口:所有流程节点必须实现public interface TxtNode {}

叶子节点(原子任务)

public record TxtTask(String name) implements TxtNode {}// 可扩展业务特定叶子节点,如:// public record TxtApiCall(String endpoint) implements TxtNode {}

容器节点(组合结构)

public record TxtSeries(List<TxtNode> steps) implements TxtNode {}​public record TxtParallel(List<TxtNode> branches) implements TxtNode {}

所有流程均由 TxtNode 构成,支持统一递归处理。

3. 模型 ↔ 文本转换

3.1 模型 → YAML(序列化)

public class FlowYamlWriter {public static String toYaml(TxtNode node) {if (node instanceof TxtTask task) {return task.name();} else if (node instanceof TxtSeries series) {return "series:\n" + indentList(series.steps());} else if (node instanceof TxtParallel parallel) {return "parallel:\n" + indentList(parallel.branches());}throw new IllegalArgumentException("Unsupported node: " + node);}​private static String indentList(List<TxtNode> nodes) {return nodes.stream().map(n -> "- " + toYaml(n).replace("\n", "\n  ")).collect(Collectors.joining("\n  "));}}

3.2 YAML → 模型(解析)

依赖 SnakeYAML:

public class FlowYamlReader {public static TxtNode fromYaml(String yaml) {Yaml parser = new Yaml();Object obj = parser.load(yaml);return parseNode(obj);}​@SuppressWarnings("unchecked")private static TxtNode parseNode(Object obj) {if (obj instanceof String str) {return new TxtTask(str);} else if (obj instanceof Map map) {if (map.containsKey("series")) {List<TxtNode> steps = ((List<?>) map.get("series")).stream().map(FlowYamlReader::parseNode).toList();return new TxtSeries(steps);} else if (map.containsKey("parallel")) {List<TxtNode> branches = ((List<?>) map.get("parallel")).stream().map(FlowYamlReader::parseNode).toList();return new TxtParallel(branches);}}throw new IllegalArgumentException("Invalid node: " + obj);}}

4. 与 BPMN 的关系说明

本模型不兼容完整 BPMN。BPMN 是通用工作流标准,而“轻流”仅覆盖其最简子集。

可转换的 BPMN 片段示例

BPMN 中如下结构:

Start → A → [Parallel Gateway] → B & C → [Join Gateway] → D → End

可转换为:

series:- A                 # 串行第一步- parallel:         # 并行分支- B- C- D                 # 串行最后一步(等B、C都完成)

转换限制

  • 仅当 BPMN 流程不含条件网关(XOR)、循环、事件、子流程时可转换
  • 实际建议:用“轻流”描述主干逻辑,复杂路径仍由 BPMN 或代码处理

5. 适用场景 vs 局限

✅ 推荐使用

  • 自动化任务步骤配置(如数据导出、批处理)
  • CI/CD 流水线中的线性阶段
  • 微服务调用编排(无分支的 Saga 步骤)
  • 执行日志中的流程快照
  • API 文档中的调用序列说明

❌ 禁止使用

  • 含 if/else 判断的业务逻辑
  • 需要重试或循环的场景
  • 多级审批、加签、退回等人工流程
  • 依赖消息触发或定时事件的流程

总结

“轻流”是一种极简、文本优先的流程表达方案:

  • 核心结构:仅 series(串行)与 parallel(并行)
  • 文本格式:YAML 风格,可直接嵌入配置
  • Java 模型:统一 TxtNode 接口,支持 TxtTask / TxtSeries / TxtParallel
  • 能力边界:明确限定于无分支、无循环的简单流程

当你的流程可以用一句话描述清楚执行顺序时,“轻流”就是最佳表达方式。若需更复杂控制流,请回归代码或 BPMN——简单问题,简单解法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java核心语法精讲:类型转换

类型转换 public class Demo04 {public static void main(String[] args){//强制转换 ()变量名 高->低//自动转换 低->高//强制转换int i=128;byte b=(byte) i;//内存溢出 -128System.out.println(i);Syste…

Read和Write再网络中的返回值详解

read 函数核心认知 read 是 Linux 系统调用&#xff08;头文件 <unistd.h>&#xff09;&#xff0c;用于从文件描述符&#xff08;fd&#xff09;读取数据&#xff0c;核心场景分两类&#xff1a;普通文件 / 管道 / FIFO、网络套接字&#xff08;TCP/UDP&#xff09;。你…

基于STM32单片机噪音计检测系统 声音大小检测 噪音等级 DIY

目录STM32单片机噪音计检测系统概述硬件组成软件设计DIY步骤应用场景源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;STM32单片机噪音计检测系统概述 该系统基于STM32单片机设计&#xff0c;用于检测环境中的声音大小和噪音等级。通过麦…

基于STM32单片机智能厨房安全检查 GSM 火焰 声光报警

目录 STM32单片机智能厨房安全系统概述核心功能模块硬件连接示例软件逻辑流程扩展功能建议 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32单片机智能厨房安全系统概述 该系统基于STM32单片机&#xff0c;集成火焰检测、GSM通信…

彻底告别AI疑似率过高:5款高效降AI工具使用全攻略,实现从90%AI率到5%的逆袭

对于2026届毕业生而言&#xff0c;论文季不仅是学术能力的终极考验&#xff0c;更是一场与AIGC检测系统的“博弈”。 依赖AI辅助写作虽提升了效率&#xff0c;却也可能带来高AI识别率的困扰。传统修改方式不仅耗时&#xff0c;还可能损伤文章的专业性与流畅度。 为此&#xf…

基于STM32单片机智能厨房安全检查 WIFI 火焰 声光报警

目录 STM32单片机智能厨房安全系统概述系统核心功能模块硬件设计要点软件算法实现典型应用场景系统优化方向 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32单片机智能厨房安全系统概述 该系统基于STM32单片机&#xff0c;集成W…

【2026实测】这些降AI工具真的有用!毕业生必备的高效、免费降AI方案与使用技巧分享

论文交稿前&#xff0c;导师再三叮嘱AI率不能超标&#xff0c;盯着电脑屏幕上“80%的AI率”头皮发麻&#xff0c;手动改到凌晨三点&#xff0c;结果一查——AI率不降反升&#xff1f;&#xff01; 别问我怎么知道的&#xff0c;都是血泪教训... 纯手改不仅效率低&#xff0c;还…

基于STM32单片机智能快递柜 智能加热 温湿度采集照明控制系统

目录 STM32单片机智能快递柜系统概述智能加热功能温湿度采集模块照明控制系统硬件设计软件设计应用场景 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32单片机智能快递柜系统概述 该系统基于STM32单片机设计&#xff0c;集成智能…

亲测有效!2026年最新AI降重工具排行榜,毕业季论文自救指南(附详细步骤)

论文交稿前&#xff0c;导师再三叮嘱AI率不能超标&#xff0c;盯着电脑屏幕上“80%的AI率”头皮发麻&#xff0c;手动改到凌晨三点&#xff0c;结果一查——AI率不降反升&#xff1f;&#xff01; 别问我怎么知道的&#xff0c;都是血泪教训... 纯手改不仅效率低&#xff0c;还…

毕业生必看:真正可用的AI降重工具盘点,从高AI率到顺利通过的完整攻略

论文交稿前&#xff0c;导师再三叮嘱AI率不能超标&#xff0c;盯着电脑屏幕上“80%的AI率”头皮发麻&#xff0c;手动改到凌晨三点&#xff0c;结果一查——AI率不降反升&#xff1f;&#xff01; 别问我怎么知道的&#xff0c;都是血泪教训... 纯手改不仅效率低&#xff0c;还…

2026降AI工具深度测评:这些工具确实有用,毕业党必看的降AI实战经验

论文交稿前&#xff0c;导师再三叮嘱AI率不能超标&#xff0c;盯着电脑屏幕上“80%的AI率”头皮发麻&#xff0c;手动改到凌晨三点&#xff0c;结果一查——AI率不降反升&#xff1f;&#xff01; 别问我怎么知道的&#xff0c;都是血泪教训... 纯手改不仅效率低&#xff0c;还…

告别高AI率!2026年有效降AI工具推荐,付费VS免费降AI工具,哪个更靠谱

论文交稿前&#xff0c;导师再三叮嘱AI率不能超标&#xff0c;盯着电脑屏幕上“80%的AI率”头皮发麻&#xff0c;手动改到凌晨三点&#xff0c;结果一查——AI率不降反升&#xff1f;&#xff01; 别问我怎么知道的&#xff0c;都是血泪教训... 纯手改不仅效率低&#xff0c;还…

5款AI降重神器深度测评:从90%降到5%的方法与工具推荐

对于2026届毕业生而言&#xff0c;论文季不仅是学术能力的终极考验&#xff0c;更是一场与AIGC检测系统的“博弈”。 依赖AI辅助写作虽提升了效率&#xff0c;却也可能带来高AI识别率的困扰。传统修改方式不仅耗时&#xff0c;还可能损伤文章的专业性与流畅度。 为此&#xf…

论文无忧!五大AI降重工具实战指南,助你高效通过AI检测,AI率从90%直降至5%

对于2026届毕业生而言&#xff0c;论文季不仅是学术能力的终极考验&#xff0c;更是一场与AIGC检测系统的“博弈”。 依赖AI辅助写作虽提升了效率&#xff0c;却也可能带来高AI识别率的困扰。传统修改方式不仅耗时&#xff0c;还可能损伤文章的专业性与流畅度。 为此&#xf…

告别高ai率困扰:精选5款实用降AI工具,详细步骤教你从90%降到5%以下

对于2026届毕业生而言&#xff0c;论文季不仅是学术能力的终极考验&#xff0c;更是一场与AIGC检测系统的“博弈”。 依赖AI辅助写作虽提升了效率&#xff0c;却也可能带来高AI识别率的困扰。传统修改方式不仅耗时&#xff0c;还可能损伤文章的专业性与流畅度。 为此&#xf…

RabbitMQ七种工作模式介绍: - 详解

RabbitMQ七种工作模式介绍: - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

智慧工地人员定位系统从核心技术对比到技术优势详解(一)

hello~这里是维构lbs智能定位&#xff0c;如果有项目需求和技术交流欢迎来私信我们~点击文章最下方可获取免费获取技术文档和解决方案 智慧工地人员定位系统是基于物联网、卫星、超宽带等技术的软件系统&#xff0c;实现施工人员的实时位置追踪、安全管控与效率优化&#xff0c…

场景、方案与优势的融合,如何正确选择KVM产品?

KVM的本质是一套让用户通过一组外设集中管控多台计算机或服务器&#xff0c;从空管塔台、数据中心&#xff0c;到智能工厂的远程控制&#xff0c;KVM已然成为支撑关键业务高效、安全运作的“神经中枢”。 然而&#xff0c;面对市场上的各类KVM解决方案&#xff0c;如何做出明智…

【大模型进阶】视频教程 一文吃透Hugging Face:从环境搭建到实战调用,解锁AI模型全家桶

Hugging Face全面指南&#xff1a;从安装到实战调用&#xff0c;轻松上手NLP与CV模型 【大模型进阶】视频课程2&#xff1a; LORA微调原理深度解析与LLaMA Factory实操指南 视频课程介绍一、Hugging Face是什么&#xff1f;二、Hugging Face环境安装三、Hugging Face模型实战调…

【MicroPython编程-ESP32篇:设备驱动】-MMA8451加速度计驱动

MMA8451加速度计驱动 文章目录 MMA8451加速度计驱动 1、MMA8451传感器介绍 2、软件准备 3、硬件准备 4、程序实现 4.1 I2C接口封装实现 4.2 MMA8451传感器驱动 4.3 主程序 1、MMA8451传感器介绍 MMA8451 是一款具有 14 位分辨率的低功耗加速度计,具有灵活用户可编程选项的嵌入…