跳至内容

C4 图

C4 图:这目前是一个实验性图表。语法和属性可能会在将来的版本中发生更改。当语法稳定后,将提供完整的文档。

Mermaid 的 C4 图语法与 PlantUML 兼容。请参见下面的示例

例如,请参见源代码 demos/index.html

支持 5 种类型的 C4 图。

  • 系统上下文图 (C4Context)
  • 容器图 (C4Container)
  • 组件图 (C4Component)
  • 动态图 (C4Dynamic)
  • 部署图 (C4Deployment)

请参考链接文档 C4-PlantUML 语法,了解如何编写 C4 图。

C4 图的样式是固定的,例如 CSS 颜色,因此在不同的皮肤下不会提供不同的 CSS。updateElementStyle 和 UpdateElementStyle 写在图表的最后部分。updateElementStyle 与原始定义不一致,更新关系的样式,包括文本标签相对于原始位置的偏移量。

布局不使用完全自动化的布局算法。通过更改语句的写入顺序来调整形状的位置。因此,目前没有计划支持以下布局语句。可以使用 UpdateLayoutConfig 来调整每行形状的数量和边界数量。

  • 布局
    • Lay_U, Lay_Up
    • Lay_D, Lay_Down
    • Lay_L, Lay_Left
    • Lay_R, Lay_Right

以下未完成的功能短期内不支持。

  • [ ] 精灵图

  • [ ] 标签

  • [ ] 链接

  • [ ] 图例

  • [x] 系统上下文

    • [x] Person(别名, 标签, ?描述, ?精灵图, ?标签, $链接)
    • [x] Person_Ext
    • [x] System(别名, 标签, ?描述, ?精灵图, ?标签, $链接)
    • [x] SystemDb
    • [x] SystemQueue
    • [x] System_Ext
    • [x] SystemDb_Ext
    • [x] SystemQueue_Ext
    • [x] Boundary(别名, 标签, ?类型, ?标签, $链接)
    • [x] Enterprise_Boundary(别名, 标签, ?标签, $链接)
    • [x] System_Boundary
  • [x] 容器图

    • [x] Container(别名, 标签, ?技术, ?描述, ?精灵图, ?标签, $链接)
    • [x] ContainerDb
    • [x] ContainerQueue
    • [x] Container_Ext
    • [x] ContainerDb_Ext
    • [x] ContainerQueue_Ext
    • [x] Container_Boundary(别名, 标签, ?标签, $链接)
  • [x] 组件图

    • [x] Component(别名, 标签, ?技术, ?描述, ?精灵图, ?标签, $链接)
    • [x] ComponentDb
    • [x] ComponentQueue
    • [x] Component_Ext
    • [x] ComponentDb_Ext
    • [x] ComponentQueue_Ext
  • [x] 动态图

    • [x] RelIndex(索引, 从, 到, 标签, ?标签, $链接)
  • [x] 部署图

    • [x] Deployment_Node(别名, 标签, ?类型, ?描述, ?精灵图, ?标签, $链接)
    • [x] Node(别名, 标签, ?类型, ?描述, ?精灵图, ?标签, $链接): Deployment_Node() 的简短名称
    • [x] Node_L(别名, 标签, ?类型, ?描述, ?精灵图, ?标签, $链接): 左对齐的 Node()
    • [x] Node_R(别名, 标签, ?类型, ?描述, ?精灵图, ?标签, $链接): 右对齐的 Node()
  • [x] 关系类型

    • [x] Rel(从, 到, 标签, ?技术, ?描述, ?精灵图, ?标签, $链接)
    • [x] BiRel (双向关系)
    • [x] Rel_U, Rel_Up
    • [x] Rel_D, Rel_Down
    • [x] Rel_L, Rel_Left
    • [x] Rel_R, Rel_Right
    • [x] Rel_Back
    • [x] RelIndex * 与 C4-PlantUML 语法兼容,但忽略索引参数。序列号由 rel 语句的写入顺序决定。
  • [ ] 自定义标签/构造型支持和皮肤参数更新

    • [ ] AddElementTag(标签构造型, ?背景色, ?字体颜色, ?边框颜色, ?阴影, ?形状, ?精灵图, ?技术, ?图例文本, ?图例精灵图): 引入新的元素标签。更新带标签元素的样式,并在计算的图例中显示标签。
    • [ ] AddRelTag(标签构造型, ?文本颜色, ?线条颜色, ?线条样式, ?精灵图, ?技术, ?图例文本, ?图例精灵图): 引入新的关系标签。更新带标签关系的样式,并在计算的图例中显示标签。
    • [x] UpdateElementStyle(元素名称, ?背景色, ?字体颜色, ?边框颜色, ?阴影, ?形状, ?精灵图, ?技术, ?图例文本, ?图例精灵图): 此调用更新元素(组件,...)的默认样式,并且不会创建额外的图例条目。
    • [x] UpdateRelStyle(从, 到, ?文本颜色, ?线条颜色, ?偏移量 X, ?偏移量 Y): 此调用更新默认关系颜色,并且不会创建额外的图例条目。添加了两个新参数偏移量 X 和偏移量 Y,用于设置文本相对于原始位置的偏移量。
    • [ ] RoundedBoxShape(): 此调用返回圆角框形状的名称,可作为 ?形状参数使用。
    • [ ] EightSidedShape(): 此调用返回八边形形状的名称,可作为 ?形状参数使用。
    • [ ] DashedLine(): 此调用返回虚线的名称,可作为 ?线条样式参数使用。
    • [ ] DottedLine(): 此调用返回点线的名称,可作为 ?线条样式参数使用。
    • [ ] BoldLine(): 此调用返回粗线的名称,可作为 ?线条样式参数使用。
    • [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): 新的。此调用更新默认的 c4ShapeInRow(4) 和 c4BoundaryInRow(2)。

使用问号分配参数有两种方法。一种是使用非命名参数分配方法按参数顺序进行,另一种是使用命名参数分配方法,名称必须以 $ 符号开头。

例如:UpdateRelStyle(从, 到, ?文本颜色, ?线条颜色, ?偏移量 X, ?偏移量 Y)

UpdateRelStyle(customerA, bankA, "red", "blue", "-40", "60")
UpdateRelStyle(customerA, bankA, $offsetX="-40", $offsetY="60", $lineColor="blue", $textColor="red")
UpdateRelStyle(customerA, bankA, $offsetY="60")

C4 系统上下文图 (C4Context)

C4 容器图 (C4Container)

C4 组件图 (C4Component)

C4 动态图 (C4Dynamic)

C4 部署图 (C4Deployment)