Skip to content

C4 图表

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

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

Code:
mermaid

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

支持 5 种类型的 C4 图表。

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

有关如何编写 C4 图表的更多信息,请参考链接文档 C4-PlantUML 语法

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

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

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

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

  • [ ] sprite

  • [ ] tags

  • [ ] link

  • [ ] Legend

  • [x] 系统上下文图

    • [x] Person(alias, label, ?descr, ?sprite, ?tags, $link)
    • [x] Person_Ext
    • [x] System(alias, label, ?descr, ?sprite, ?tags, $link)
    • [x] SystemDb
    • [x] SystemQueue
    • [x] System_Ext
    • [x] SystemDb_Ext
    • [x] SystemQueue_Ext
    • [x] Boundary(alias, label, ?type, ?tags, $link)
    • [x] Enterprise_Boundary(alias, label, ?tags, $link)
    • [x] System_Boundary
  • [x] 容器图

    • [x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
    • [x] ContainerDb
    • [x] ContainerQueue
    • [x] Container_Ext
    • [x] ContainerDb_Ext
    • [x] ContainerQueue_Ext
    • [x] Container_Boundary(alias, label, ?tags, $link)
  • [x] 组件图

    • [x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
    • [x] ComponentDb
    • [x] ComponentQueue
    • [x] Component_Ext
    • [x] ComponentDb_Ext
    • [x] ComponentQueue_Ext
  • [x] 动态图

    • [x] RelIndex(index, from, to, label, ?tags, $link)
  • [x] 部署图

    • [x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link)
    • [x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): Deployment_Node() 的简写
    • [x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): 左对齐的 Node()
    • [x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): 右对齐的 Node()
  • [x] 关系类型

    • [x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link)
    • [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(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): 引入新的元素标签。标记元素的样式将被更新,并且该标签将显示在计算出的图例中。
    • [ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): 引入新的关系标签。标记关系的样式将被更新,并且该标签将显示在计算出的图例中。
    • [x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): 此调用更新元素(组件等)的默认样式,并且不会创建额外的图例条目。
    • [x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): 此调用更新默认关系颜色,并且不会创建额外的图例条目。添加了两个新参数 offsetX 和 offsetY 来设置文本原始位置的偏移量。
    • [ ] RoundedBoxShape(): 此调用返回圆角框形状的名称,可用作 ?shape 参数。
    • [ ] EightSidedShape(): 此调用返回八边形形状的名称,可用作 ?shape 参数。
    • [ ] DashedLine(): 此调用返回虚线的名称,可用作 ?lineStyle 参数。
    • [ ] DottedLine(): 此调用返回点线的名称,可用作 ?lineStyle 参数。
    • [ ] BoldLine(): 此调用返回粗线的名称,可用作 ?lineStyle 参数。
    • [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): 新的。此调用更新默认的 c4ShapeInRow(4) 和 c4BoundaryInRow(2)。

有两种方法可以使用问号赋值参数。一种是按照参数顺序使用非命名参数赋值方法,另一种是使用命名参数赋值方法,其中名称必须以 $ 符号开头。

示例:UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY)

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)

Code:
mermaid

C4 容器图 (C4Container)

Code:
mermaid

C4 组件图 (C4Component)

Code:
mermaid

C4 动态图 (C4Dynamic)

Code:
mermaid

C4 部署图 (C4Deployment)

Code:
mermaid