BLOGE
0.9.9-RC1在线版 · 编制 2026-11-02 · English
第一阶段回顾 —— 入门(第 1–4 章)
你现在已经掌握了阅读小型 BLOGE DAG、预 测其声明数据依赖所需的词汇和心智模型。
你学到了什么
第 1 章 —— BLOGE 是什么,以及它为什么存在 为你建立了 BLOGE 的三个核心特征:工作流是可见的(graph 的形状是显式的)、执行由依赖驱动(你声明边,引擎决定顺序)、韧性是内建的(重试、超时、降级属于模型本身)。
第 2 章 —— 你的第一个 Graph 把理论变成了实践。你构建了一个 graph、运行它、检查了 GraphResult,亲眼看到是引擎——而不是你——决定哪些节点可以并行执行。
第 3 章 —— 依赖关系思维 强化了你对依赖边的判断力。你学会了阅读有向无环图、识别不必要的串行化,以及区分控制依赖和数据依赖。
第 4 章 —— 流动的数据 补全了整幅图。你了解了数据如何通过 context 进入 graph、如何通过 input binding 在节点间流动、如何通过 node output 流出。你练习了路径表达式、安全导航(?.)、空值合并(??)、transform 和 lambda 输入绑定。
你现在应该能做到
- 用一句话描述 BLOGE,不借助任何框架术语。
- 在纸上画出一个小型工作流的依赖图,并预测执行顺序。
- 编写一个包含三四个节点、显式依赖和输入绑定的简单
.bloge文件。 - 读取
GraphResult并安全地提取类型化输出。 - 解释 transform 和 operator 节点的区别。
这个阶段的常见错误
| 错误 | 为什么会犯 | 如何纠正 |
|---|---|---|
添加多余的 depends_on 边 | 把"这个在那个之后执行"和"这个确实需要那个节点的数据"搞混了 | 问自己:下游节点是否读取上游输出?如果不是,就去掉这条边。 |
总用 getOutput 而不是 findOutput | 假设每个节点一定会完成 | 当节点可能被跳过或失败时,用 findOutput 或 getOutputOrDefault。 |
| 把业务逻辑放进 transform | Transform 是零开销的数据投影,不是 operator | 如果代码有副作用或可能失败,就应该放进 operator。 |
硬编码值而不是使用 ctx.* | 从示例中复制粘贴时忘了参数化 | 把环境相关或调用方相关的值移入 graph context。 |