【MarkDown】CSDN Markdown之C4图(C4Context、C4Container、C4Component、C4Dynamic、C4Deployment)详解


C4图

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

CSDN 目前版本(mermaid v8.14.0)不支持此语法,以下所有示例都是在mermaid v9.4.0 进行测试。
MermaidC4图语法与plantUML兼容。以下是示例:

** 代码:**

C4Context
      title 互联网银行系统的系统上下文图
      Enterprise_Boundary(b0, "企业边界") {
        Person(customerA, "标签:银行客户A", "描述:银行的客户,拥有个人银行账户。")
        Person(customerB, "标签:银行客户B")
        Person_Ext(customerC, "标签:银行客户C", "描述:小微企业代表")

        Person(customerD, "标签:银行客户D", "描述:银行的客户,<br/>拥有个人银行账户。")

        System(SystemAA, "标签:互联网银行系统", "描述:允许客户查看有关其银行账户的信息并进行付款。")

        Enterprise_Boundary(b1, "标签:银行企业边界") {

          SystemDb_Ext(SystemE, "标签:银行主系统", "描述:存储关于客户、账户、交易等所有核心银行信息的系统。")

          System_Boundary(b2, "标签:银行系统边界") {
            System(SystemA, "标签:银行系统A")
            System(SystemB, "标签:银行系统B", "描述:一种银行系统,带有个人银行账户。")
          }

          System_Ext(SystemC, "标签:电子邮件系统", "描述:微软Exchange内部电子邮件系统。")
          SystemDb(SystemD, "标签:银行数据库系统D", "描述:一种银行系统,带有个人银行账户")

          Boundary(b3, "标签:银行队列系统边界", "描述:队列系统") {
            SystemQueue(SystemF, "标签:银行队列系统F", "描述:一种银行系统。")
            SystemQueue_Ext(SystemG, "标签:银行队列系统G", "描述:一种银行系统,带有个人银行账户。")
          }
        }
      }

      BiRel(customerA, SystemAA, "标签:交互")
      BiRel(SystemAA, SystemE, "标签:交互")
      Rel(SystemAA, SystemC, "标签:创建邮件任务", "技术:SMTP")
      Rel(SystemC, customerA, "标签:发送邮件到")

      UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
      UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
      UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10")
      UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50")
      UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="100", $offsetY="20")

      UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="1")

在这里插入图片描述

例如,要查看源代码演示demos/index.html的示例。

支持5种类型的C4图表。

  • C4Context: 系统上下文图
  • C4Container: 系统容器图
  • C4Component: 系统组件图
  • C4Dynamic: 系统动态图
  • C4Deployment: 系统部署图
    请参阅链接文档C4-PlantUML语法,了解如何编写C4图。

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

  • 系统上下文

    • Person(alias, label, ?descr, ?sprite, ?tags, $link):人物。通常渲染为深蓝色背景带有人物符号的矩形框
    • Person_Ext:人物(已存在),参数与 Person 函数一致。通常渲染为灰色背景带有人物符号的节点。
    • System(alias, label, ?descr, ?sprite, ?tags, $link):系统。通常渲染为蓝色矩形框
    • SystemDb:数据库系统,参数与 System 函数一致。通常渲染为蓝色立式圆柱。
    • SystemQueue:队列系统,参数与 System 函数一致。通常渲染为蓝色横式圆柱。
    • System_Ext:普通系统(已存在),参数与 System 函数一致。通常渲染为灰色矩形。
    • SystemDb_Ext:数据库系统(已存在),参数与 System 函数一致。通常渲染为灰色立式圆柱。
    • SystemQueue_Ext:队列系统(已存在),参数与 System 函数一致。通常渲染为灰色横式圆柱。
    • Boundary(alias, label, ?type, ?tags, $link):边界。默认typesystem通常渲染为虚线框。
    • Enterprise_Boundary(alias, label, ?tags, $link):企业的边界。typeENTERPRISE通常渲染为虚线框。
    • System_Boundary:系统的边界。通常渲染为虚线框。
  • 容器图

    • Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link) : 普通容器。通常渲染为蓝色矩形框。
    • ContainerDb : 数据库容器,参数与 Container 函数一致。通常渲染为蓝色立式圆柱。
    • ContainerQueue: 队列容器,参数与 Container 函数一致。通常渲染为蓝色横式圆柱。
    • Container_Ext : 普通容器(已存在),参数与 Container 函数一致。通常渲染为灰色矩形。
    • ContainerDb_Ext : 数据库容器(已存在),参数与 Container 函数一致。通常渲染为灰色立式圆柱。
    • ContainerQueue_Ext : 队列容器(已存在),参数与 Container 函数一致。通常渲染为灰色横式圆柱。
    • Container_Boundary(alias, label, ?tags, $link):容器的边界。通常渲染为虚线框。
  • 组件图

    • Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link): 普通组件。通常渲染为浅蓝色矩形。
    • ComponentDb: 数据库组件,参数与 Component 函数一致。通常渲染为浅蓝色立式圆柱。
    • ComponentQueue: 队列组件,参数与 Component 函数一致。通常渲染为浅蓝色横式圆柱。
    • Component_Ext: 普通组件(已存在),参数与 Component 函数一致。通常渲染为灰色矩形。
    • ComponentDb_Ext : 数据库组件(已存在),参数与 Component 函数一致。通常渲染为灰色立式圆柱。
    • ComponentQueue_Ext: 队列组件(已存在),参数与 Component 函数一致。通常渲染为灰色横式圆柱。
  • 动态图

    • RelIndex(index, from, to, label, ?tags, $link):单边关系,渲染效果与Rel一致。index不是显示的序号,序列号是由rel声明的顺序决定的。
  • 部署图

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

    • Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link) : 单边关系。通常渲染为从from指向to的箭头
    • BiRel : 双向关系,参数与 Rel 函数一致。通常渲染为从from指向to以及从to指向from的双向箭头。
    • Rel_U,Rel_Up :单边关系,参数与 Rel 函数一致。渲染效果与Rel一致。
    • Rel_D,Rel_Down :单边关系,参数与 Rel 函数一致。渲染效果与Rel一致。
    • Rel_L,Rel_Left :单边关系,参数与 Rel 函数一致。渲染效果与Rel一致。
    • Rel_R,Rel_Right:单边关系,参数与 Rel 函数一致。渲染效果与Rel一致。
    • Rel_Back: 反向单边关系,参数与 Rel 函数一致。通常渲染为从to指向from的箭头
    • RelIndex *C4-Plantuml语法兼容,但忽略索引参数。序列号是由rel声明的顺序决定的。
  • 自定义tags/stereotypes支持和皮肤参数更新

    • AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite):引入新的元素标签。已标记元素的样式将更新,并在计算出的图例中显示标签。
    • AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite):引入新的关系标签。已标记关系的样式将得到更新,并在计算的图例中显示标签。
    • UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite):此调用更新元素(组件等)的默认样式,并不创建其他图例条目。
    • UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY):此调用更新默认关系颜色,并不创建其他图例条目。添加了两个新参数offsetXoffsetY来设置文本原始位置的偏移量。
    • RoundedBoxShape():此调用返回圆形框架的名称,并可用作?shape参数。
    • EightSidedShape():此调用返回八边形的名称,并可用作?shape参数。
    • DashedLine():此调用返回虚线的名称,并可用作?lineStyle参数。
    • DottedLine():此调用返回点线的名称,并可用作?lineStyle参数。
    • BoldLine():此调用返回粗体线的名称,并可用作?lineStyle参数。
    • UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow):新。此调用更新默认c4ShapeInRow(4)和c4BoundaryInRow(2)。如:UpdateLayoutConfig($c4ShapeInRow="1",$c4BoundaryInRow="2")

参数含义及说明

参数说明
index序号
alias别名/变量名
label标签
type类型
techn技术
descr描述
sprite图文符号
tags标记
link链接
Legend图例
from头节点
to尾节点
bgColor背景颜色
fontColor字体颜色
borderColor边框颜色
shadowing阴影
shape形状
legendText图列文本
legendSprite图列图文符号
textColor文本颜色
lineColor线条颜色
offsetXX方向偏移值
offsetYY方向偏移值
c4ShapeInRow一行显示的形状数量
c4BoundaryInRow一行显示的边界数量

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

例如: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)

** 代码:**

C4Context
      title 互联网银行系统的系统上下文图
      Enterprise_Boundary(b0, "企业边界") {
        Person(customerA, "标签:银行客户A", "描述:银行的客户,拥有个人银行账户。")
        Person(customerB, "标签:银行客户B")
        Person_Ext(customerC, "标签:银行客户C", "描述:小微企业代表")

        Person(customerD, "标签:银行客户D", "描述:银行的客户,<br/>拥有个人银行账户。")

        System(SystemAA, "标签:互联网银行系统", "描述:允许客户查看有关其银行账户的信息并进行付款。")

        Enterprise_Boundary(b1, "标签:银行企业边界") {

          SystemDb_Ext(SystemE, "标签:银行主系统", "描述:存储关于客户、账户、交易等所有核心银行信息的系统。")

          System_Boundary(b2, "标签:银行系统边界") {
            System(SystemA, "标签:银行系统A")
            System(SystemB, "标签:银行系统B", "描述:一种银行系统,带有个人银行账户。")
          }

          System_Ext(SystemC, "标签:电子邮件系统", "描述:微软Exchange内部电子邮件系统。")
          SystemDb(SystemD, "标签:银行数据库系统D", "描述:一种银行系统,带有个人银行账户")

          Boundary(b3, "标签:银行队列系统边界", "描述:队列系统") {
            SystemQueue(SystemF, "标签:银行队列系统F", "描述:一种银行系统。")
            SystemQueue_Ext(SystemG, "标签:银行队列系统G", "描述:一种银行系统,带有个人银行账户。")
          }
        }
      }

      BiRel(customerA, SystemAA, "标签:交互")
      BiRel(SystemAA, SystemE, "标签:交互")
      Rel(SystemAA, SystemC, "标签:创建邮件任务", "技术:SMTP")
      Rel(SystemC, customerA, "标签:发送邮件到")

      UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
      UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
      UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10")
      UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50")
      UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20")

      UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="1")

在这里插入图片描述


C4容器图 (C4Container)

** 代码:**

C4Container
    title 网上银行系统容器图
    System_Ext(email_system, "标签:电子邮件系统", "描述:内部 Microsoft Exchange 系统。", $tags="v1.0")
    Person(customer, "标签:客户", "描述:银行的客户,拥有个人银行账户。", $tags="v1.0")

    Container_Boundary(c1, "网上银行") {
        Container(spa, "标签:单页面应用", "技术:JavaScript, Angular", "描述:通过网络浏览器向客户提供所有的网上银行功能。")
        Container_Ext(mobile_app, "标签:移动应用", "技术:C#, Xamarin", "描述:通过客户的移动设备为其提供有限的网上银行功能子集。")
        Container(web_app, "标签:Web应用程序", "技术:Java, Spring MVC", "描述:提供静态内容和网上银行单页面应用(SPA)。")
        ContainerDb(database, "标签:数据库", "技术:SQL Database", "描述:存储用户注册信息、哈希认证凭据、访问日志等。")
        ContainerDb_Ext(backend_api, "标签:接口应用程序", "技术:Java, Docker Container", "描述:通过API提供网上银行功能。")

    }

    System_Ext(banking_system, "标签:银行主系统", "描述:存储关于客户、账户、交易等所有核心银行信息。")

    Rel(customer, web_app, "标签:使用", "技术:HTTPS")
    UpdateRelStyle(customer, web_app, $offsetY="60", $offsetX="90")
    Rel(customer, spa, "标签:使用", "技术:HTTPS")
    UpdateRelStyle(customer, spa, $offsetY="-40")
    Rel(customer, mobile_app, "标签:使用")
    UpdateRelStyle(customer, mobile_app, $offsetY="-30")

    Rel(web_app, spa, "Delivers")
    UpdateRelStyle(web_app, spa, $offsetX="130")
    Rel(spa, backend_api, "标签:使用", "技术:async, JSON/HTTPS")
    Rel(mobile_app, backend_api, "标签:使用", "技术:async, JSON/HTTPS")
    Rel_Back(database, backend_api, "标签:读取和写入", "技术:sync, JDBC")

    Rel(email_system, customer, "标签:发送电子邮件")
    UpdateRelStyle(email_system, customer, $offsetX="-45")
    Rel(backend_api, email_system, "标签:创建电子邮件任务", "技术:sync, SMTP")
    UpdateRelStyle(backend_api, email_system, $offsetY="-60")
    Rel(backend_api, banking_system, "标签:使用", "技术:sync/async, XML/HTTPS")
    UpdateRelStyle(backend_api, banking_system, $offsetY="-50", $offsetX="-140")

在这里插入图片描述


C4组件图 (C4Component)

** 代码:**

C4Component
    title 互联网银行系统API应用程序的组件图

    Container(spa, "标签:单页应用程序", "技术:javascript 和 angular", "描述:通过网络浏览器,为客户提供所有互联网银行功能。")
    Container(ma, "标签:移动应用", "技术:Xamarin", "描述:通过移动设备,向客户提供互联网银行功能的有限子集。")
    ContainerDb(db, "标签:数据库", "技术:关系数据库模式", "描述:存储用户注册信息、哈希认证凭证、访问日志等等。")
    System_Ext(mbs, "银行主系统", "存储有关客户、账户、交易等核心银行信息的全部数据。")

    Container_Boundary(api, "接口应用程序") {
        Component(sign, "标签:登录控制器", "技术:MVC Rest Controller", "描述:允许用户登录网上银行系统")
        Component(accounts, "标签:账户汇总控制器", "技术:MVC Rest Controller", "描述:为客户提供银行账户汇总")
        Component(security, "标签:安全组件", "技术:Spring Bean", "描述:提供与登录、更改密码等相关的功能。")
        Component(mbsfacade, "标签:银行主系统入口", "技术:Spring Bean", "描述:银行主系统的入口")

        Rel(sign, security, "标签:使用")
        Rel(accounts, mbsfacade, "标签:使用")
        Rel(security, db, "标签:读取和写入", "技术:JDBC")
        Rel(mbsfacade, mbs, "标签:使用", "技术:XML/HTTPS")
    }
    

    Rel_Back(spa, sign, "标签:使用", "技术:JSON/HTTPS")
    Rel(spa, accounts, "标签:使用", "技术:JSON/HTTPS")

    Rel(ma, sign, "标签:使用", "技术:JSON/HTTPS")
    Rel(ma, accounts, "标签:使用", "技术:JSON/HTTPS")

    UpdateRelStyle(spa, sign, $offsetX="-50", $offsetY="20")
    UpdateRelStyle(spa, accounts, $offsetX="-50", $offsetY="40")

    UpdateRelStyle(ma, sign, $offsetX="0", $offsetY="-40")
    UpdateRelStyle(ma, accounts, $offsetY="-0")

        UpdateRelStyle(sign, security, $offsetX="-180", $offsetY="10")
        UpdateRelStyle(accounts, mbsfacade, $offsetX="160", $offsetY="10")
        UpdateRelStyle(security, db, $offsetY="-40")
        UpdateRelStyle(mbsfacade, mbs, $offsetY="-40")

在这里插入图片描述


C4动态图 (C4Dynamic)

** 代码:**

C4Dynamic
    title 互联网银行系统 - API应用的动态图
    ContainerDb(c4, "标签:数据库", "技术:关系数据库模式", "描述:存储用户注册信息、哈希认证凭证、访问日志等等。")
    Container(c1, "标签:单页面应用", "技术:JavaScript 和 Angular", "描述:通过客户的Web浏览器为客户提供所有互联网银行功能。")
    Container_Boundary(b, "标签:接口应用") {
      Component(c3, "标签:安全组件", "技术:Spring Bean", "描述:提供与登录、更改密码等功能相关的功能。")
      Component(c2, "标签:登录控制器", "技术:Spring MVC Rest Controller", "描述:允许用户登录互联网银行系统。")
    }
    Rel(c1, c2, "标签:提交凭证", "技术:JSON/HTTPS")
    Rel(c2, c3, "标签:调用 isAuthenticated()接口")
    Rel(c3, c4, "标签:select * from users where username = ?", "技术:JDBC")

    UpdateRelStyle(c1, c2, $textColor="red", $offsetY="-40")
    UpdateRelStyle(c2, c3, $textColor="red", $offsetX="-40", $offsetY="60")
    UpdateRelStyle(c3, c4, $textColor="red", $offsetY="-40", $offsetX="10")

在这里插入图片描述


C4部署图 (C4Deployment)

** 代码:**

C4Deployment
    title 网上银行系统部署示意图-Live

    Deployment_Node(mob, "标签:客户移动设备", "系统类型:苹果IOS或安卓"){
        Container(mobile, "标签:移动应用程序", "技术:Xamarin", "描述:为客户在他们的移动设备上提供有限的互联网银行功能。")
    }

    Deployment_Node(comp, "标签:客户电脑", "系统类型:Windows或MacOS"){
        Deployment_Node(browser, "标签:网络浏览器", "浏览器类型:Google Chrome, Mozilla Firefox,<br/> Apple Safari 或者 Microsoft Edge"){
            Container(spa, "标签:单页面应用程序", "技术:JavaScript 和 Angular", "描述:通过客户的网络浏览器为客户提供所有互联网银行功能。")
        }
        
    }

    Deployment_Node(plc, "标签:大银行股份有限公司", "公司部门类型:大银行股份有限公司数据中心"){
        Deployment_Node(dn, "标签:大银行接口*** x8", "系统类型:Ubuntu 16.04 LTS(长期支持版本)"){
            Deployment_Node(apache, "标签:Apache Tomcat", "版本类型:Apache Tomcat 8.x"){
                Container(api, "标签:接口应用程序", "技术:Java 和 Spring MVC", "描述:通过JSON / HTTPS API提供互联网银行功能。")
            }
        }
        Deployment_Node(bb2, "标签:大银行网页*** x4", "系统类型:Ubuntu 16.04 LTS(长期支持版本)"){
            Deployment_Node(apache2, "标签:Apache Tomcat", "版本类型:Apache Tomcat 8.x"){
                Container(web, "标签:Web 应用程序", "技术:Java和 Spring MVC", "描述:提供静态内容和互联网银行单页面应用程序。")
            }
        }
        Deployment_Node(bigbankdb01, "标签:大银行数据库1", "系统类型:Ubuntu 16.04 LTS(长期支持版本)"){
            Deployment_Node(oracle, "标签:Oracle主库", "版本类型:Oracle 12c"){
                ContainerDb(db, "标签:数据库", "技术:关系数据库模式", "描述:存储用户注册信息、哈希认证凭证、访问日志等等。")
            }
        }
        Deployment_Node(bigbankdb02, "标签:大银行数据库2", "系统类型:Ubuntu 16.04 LTS(长期支持版本)") {
            Deployment_Node(oracle2, "标签:Oracle从库", "版本类型:Oracle 12c") {
                ContainerDb(db2, "标签:数据库", "技术:关系数据库模式", "描述:存储用户注册信息、哈希认证凭证、访问日志等等。")
            }
        }
    }

    Rel(mobile, api, "标签:调用API", "技术:json/HTTPS")
    Rel(spa, api, "标签:调用API", "技术:json/HTTPS")
    Rel_R(web, spa, "标签:传输到客户的Web浏览器")
    Rel(api, db, "标签:从api读取或写入数据库", "技术:JDBC")
    Rel(api, db2, "标签:从api读取或写入数据库", "技术:JDBC")
    Rel_R(db, db2, "标签:复制数据")

    UpdateRelStyle(spa, api, $offsetY="-40")
    UpdateRelStyle(web, spa, $offsetY="-40")
    UpdateRelStyle(api, db, $offsetY="-20", $offsetX="5")
    UpdateRelStyle(api, db2, $offsetX="-40", $offsetY="-20")
    UpdateRelStyle(db, db2, $offsetY="-10")

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值