心 智 七 篇 · Seven Mental Models
← Knowledge Atlas · 源头

Fractal Architecture(Anton Telesh, 2016)

分形架构:自相似组件、统一接口、递归组合,从 React/Elm/Cycle.js 提取的通用模式
源头 · FRACTAL ARCHITECTURE · Anton Telesh · 前端框架共性 · 2016

分形架构 · 前端组件化的共同基底

自相似性 + 统一 API = 任意子树都是有效的树

如果你理解一个组件的工作方式,你就理解了所有组件——因为所有组件暴露相同的 API 形状,每个子树都是一个有效的完整树。

应用是由相同 API 的组件组成的树
所有组件暴露统一接口——这是分形的自相似性条件
每个组件可以包含其他组件
组合是递归的——任意组件可嵌入任意上下文
顶层组件与其他组件无本质区别
根节点不享有特权——组件不知道自己是”根”还是”叶”
胶水代码与应用逻辑分离
引导 / 装配在组件体系之外完成——分形架构能成立的前提
React / AngularXML 声明式组件 · bootstrap API
Elminit/update/view 三函数 + main 传入根
Cycle.js纯函数 observables → observables · 单独 wiring 层
→ fractal-architecture · implicit-loop-architecture · agent-skills · cycle-jsantontelesh.github.io

Fractal Architecture(Anton Telesh, 2016)

来源信息

结构化摘要

这篇文章提出了”分形架构”(fractal architecture)的概念,用以描述一类在现代前端框架中反复出现的组件化模式。作者从 React、Angular、Elm、Cycle.js 等框架中提取共性,归纳出四条分形架构规则。

四条规则

  1. 应用是由相同 API 的组件组成的树——所有组件暴露统一接口
  2. 每个组件可以包含(使用)其他组件——组合是递归的
  3. 顶层组件与其他组件无本质区别——自相似性,根节点不享有特权
  4. 胶水代码与应用逻辑分离——引导/装配在组件体系之外完成

框架实例

框架组件 API引导方式
React/Angular类 XML 声明式组件bootstrap API(与组件 API 不同)
Elminit/update/view 三函数main 函数传入根组件
Cycle.js纯函数:接收 observables → 返回 observables单独的 wiring 层

Redux 的反模式分析

文章指出 Redux 本身并无问题,但许多应用违反了分形架构原则:

  • 组件直接依赖全局 store,而非通过参数注入
  • 组件负责创建 store(本应是 singleton 的依赖)
  • 没有定义清晰的模块边界和 API

修复方案:让每个 Redux 模块导出 reducer + view(统一 API),不负责 store 创建,通过参数访问自己的状态切片。引导代码在模块体系之外完成组装。

关键收获

  1. 自相似性是可扩展架构的核心:如果你理解一个组件的工作方式,你就理解了所有组件
  2. 可组合性来自统一接口:相同的 API 形状使任意组件可嵌入任意上下文
  3. 引导与逻辑的分离:这是分形架构能成立的前提——组件不知道自己是”根”还是”叶”
  4. 每个子树都是有效的树:任何子组件都可以独立提取为独立应用,便于重构、测试和复用

与 Wiki 其他概念的联系

  • 分形架构——本文提出的核心模式
  • 隐式循环架构——Cycle.js 的纯函数组件与隐式循环的”行为由约束塑造”有结构呼应
  • Agent Skills——技能的可组合打包与分形架构的”统一 API + 递归组合”高度同构
  • Cycle.js——本文的主要示例框架

References

  • Anton Telesh, “Fractal Architecture”, 2016-03-16 — sources/fractal-architecture-cyclejs.md