跳到正文
misoto22 design

图示

ArchitectureFigure 架构图

一张组件地图:服务、数据存储、信任边界,以及谁在跟谁说话。

来自@misoto22/design/diagrams

什么时候用它

问题是“谁跟谁说话”时用它。问题是“按什么顺序”,那是流程图或时序图;问题是“这根箭头里装的是什么”,那是数据流图。

示例

default

One request, end to end

The edge, the service, the row it reads.
One request, end to end5 elements and 4 relationships. The edge, the service, the row it reads.EXTERNALBrowserSafari / ChromeCLOUDCloudFrontCDN:8000APIFastAPIDATARedisread-throughDATAPostgresprimary

5 elements and 4 relationships. The edge, the service, the row it reads.

  • Browser (external) — Safari / Chrome
  • CloudFront (cloud) — CDN
  • API (backend) — FastAPI
  • Redis (database) — read-through
  • Postgres (database) — primary
  • BrowserCloudFront: HTTPS
  • CloudFrontAPI
  • APIRedis: read-through
  • APIPostgres: SQL
Key
  • EXTERNAL
  • CLOUD
  • SERVICE
  • DATA
Edge
  • Every request is fronted by the CDN.
Application
  • Reads go through Redis first.
  • Postgres is the source of truth.

说明

一张组件地图:服务、数据存储、边界,以及谁在跟谁说话。

它吃的是 archify architecture 规格所携带的同一份 JSON——componentsboundariesconnections——然后用这套系统自己的语汇画出来:细线上的纸质板块、给这张图真正要讲的那个组件一块反白板,以及七个画出来的符号,替掉 archify 用的七种色相。

它能在服务端渲染,因为每一个位置本来就写在规格里。一个组件要么给出 rowcol——落进一个格子尺寸要么声明、要么取默认的网格——要么给出绝对的 pos。这里没有任何东西是解出来的、松弛出来的或量出来的。所以标记是输入的纯函数,服务端和浏览器完全一致,水合时也不会有布局抖动——因为压根没有布局要做。

边界先画,而且画得不一样。region 是某个东西运行在哪里——一个 VPC、一个可用区、一个集群——画成实线框。security-group 是什么够得到它,画成虚线。这不是装饰:一张基础设施图非常经常只被拿来回答这两个问题中的一个,而读者应该在不读任何一个标签的情况下就能分辨哪根线回答哪个问题。

属性

ArchitectureFigure props
属性类型默认值说明
spec必填ArchitectureSpec

同时接受 FigureChrome 里的全部属性,它们会直接透传给底层元素,不再逐条列出。

无障碍

  • <svg> 是 role="img" 并带名字,所以读屏软件播报的是一张图,而不是按绘制顺序把两百个 <text> 节点走一遍。
  • 图的内容以普通列表的形式发布在图旁边——每个节点连同它的种类,每条关系写成「A → B:走 HTTPS」。对看不到这张图的人来说,意思就活在那份列表里。
  • 传了 onSelectNode,那份列表就变成真按钮——这是键盘唯一能选中节点的路径:图里的板块按设计就是纯装饰的。