【ZenUML】时序图之ZenUML详解

news2024/11/25 6:37:37

时序图

序列图是一种交互图,显示进程如何彼此操作以及顺序。

Mermaid可以使用ZenUML渲染序列图。请注意,ZenUML使用的语法与mermaid中的原始序列图不同。

目前,最新版本mermaid v10.2.3 暂时不单独支持zenuml语法,需要配合mermaid-zenuml一起使用,zenumlsequenceDiagram都是时序图,从时序图的作用渲染大致框架来说基本没有区别,只是渲染的效果有差异。
你可以使用ZenUML - Workspace在线编写。

代码:

zenuml
    title 示例
    "张三"->"李四": 李女士,最近过得怎么样?
    "李四"->"张三": 我很好!
    "张三"->"李四": 晚点见!

在这里插入图片描述

语法

参与者

参与者可以像页面上第一个示例那样隐式定义。参与者或角色按照在图表源文本中出现的顺序呈现。 有时您可能希望以不同于其在第一条消息中出现的顺序显示参与者。可以通过以下方式指定演员的出现顺序:
代码:

zenuml
    title 定义参与者 (可选)
    "王五"
    "张三"
    "张三"->"王五": 你好,隔壁老王!
    "王五"->"张三": 你好,上铺张三!

在这里插入图片描述

注释符

如果您想要使用符号而不仅仅是带有文本的矩形,可以使用注释符来声明参与者,如下所示。

代码:

zenuml
    title 注释符
    @Actor "张三"
    @Database "王五"
    "张三"->"王五": Hi "王五"
    "王五"->"张三": Hi "张三"

在这里插入图片描述

这里是可用的注释符列表:

@Actor
@Boundary
@Control
@Database
@Entity
@CloudWatch
@CloudFront
@Cognito
@DynamoDB
@EBS
@EC2
@ECS
@EFS
@ElastiCache
@ElasticBeantalk
@ElasticFileSystem
@Glacier
@IAM
@Kinesis
@Lambda
@LightSail
@RDS
@Redshift
@S3
@SNS
@SQS
@Sagemaker
@VPC
@AzureActiveDirectory
@AzureBackup
@AzureCDN
@AzureDataFactory
@AzureDevOps
@AzureFunction
@AzureSQL
@CosmosDB
@LogicApps
@VirtualMachine
@BigTable
@BigQuery
@CloudCDN
@CloudDNS
@CloudInterconnect
@CloudLoadBalancing
@CloudSQL
@CloudStorage
@DataLab
@DataProc
@GooglelAM
@GoogleSecurity
@GoogleVPC
@PubSub
@SecurityScanner
@StackDriver
"@VisionAPI

@Actors

别名

参与者可以有方便识别的标识符和描述性标签。

代码:

zenuml
    title 别名
    A as "张三"
    J as "李四"
    A->J: 李女士,最近过得怎么样?
    J->A: 我很好!

在这里插入图片描述

消息

消息可以是以下之一:

  • 同步消息
  • 异步消息
  • 创建消息
  • 回复消息

同步消息

可以将编程语言中的同步(阻塞)方法理解为等待方法执行完毕并返回结果后再进行下一步操作。

代码:

zenuml
    title 同步消息
    "接口A"."同步消息"
    "接口A"."同步消息"("参数1","参数2") {
      "接口B"."嵌套同步消息"()
    }

在这里插入图片描述

异步消息

可以将编程语言中的异步(非阻塞)方法理解为触发一个事件,然后不需要再考虑它。

代码:

zenuml
    title 异步消息
    "张三"->"王五": 你好吗?

在这里插入图片描述

创建消息

我们使用 new 关键字来创建一个消息对象。

代码:

zenuml
    new A1
    new A2("参数1", "参数2")

在这里插入图片描述

回复消息

有三种方法可以表达回复消息:

代码:

zenuml
    // 1. 从同步消息中分配一个变量。
    "消息" = "接口"."同步消息"()

    // 1.1. 为变量指定类型。
    "类型" "消息" = "接口"."同步消息"()

    // 2. 使用 return 关键字
    "接口"."同步消息"() {
    return "返回结果"
    }

    // 3. 在异步消息上使用 @return 或 @reply 注释符。
    @return
    "接口"->"页面":  "返回结果"

在这里插入图片描述

第三种 @return 的用法很少,但在想要返回到上一级时非常有用。

代码:

zenuml
    title 回复消息
    "客户端"->"接口A"."方法"() {
      "接口B"."方法"() {
        if("条件") {
          return "结果1"
          // 提前返回
          @return
          "接口A"->"客户端": "结果1.1"
        }
      }
      return "结果2"
    }

在这里插入图片描述

嵌套

同步消息和创建消息可以通过 {} 进行嵌套表示。

代码:

zenuml
    "接口A"."方法"() {
      "接口B"."嵌套的同步方法"()
      "接口B"->"接口C": 嵌套异步消息
    }

在这里插入图片描述

注释

可以使用 // 注释语法在序列图中添加注释。注释将呈现在消息或片段上方。其他位置的注释会被忽略。支持使用 Markdown

请参考下面的示例:

代码:

zenuml
    // 对参与者的说明不会被渲染。
    "书籍服务"
    // 对消息的说明</br>
    // 支持**Markdown** 语法
    "书籍服务"."获取书籍"()

在这里插入图片描述

循环

可以在 ZenUML 图表中表达循环结构。这是通过以下任意一种符号进行表示的:

  1. while
  2. for
  3. forEach, foreach
  4. loop

while(<条件语句>) {
    <交互语句>
}

请参考下面的示例:

代码:

zenuml
    "张三"->"李四": 李女士,最近过得怎么样?
    while("真") {
      "李四"->"张三": 我很好!
    }

在这里插入图片描述

条件/替代

可以在序列图中表达替代路径。这是通过以下符号进行表示的:

if(<条件语句>) {
   <交互语句>
} else if(<条件语句>) {
    <交互语句>
} else {
    <交互语句>
}

请参考下面的示例:

代码:

zenuml
    "张三"->"王五": 王老师,最近过得怎么样?
    if("虚弱") {
      "王五"->"张三": 不是很好┭┮﹏┭┮┭┮﹏┭┮
    } else {
      "王五"->"张三": 感觉神清气爽!
    }

在这里插入图片描述

选项

可以渲染一个 opt 片段。这是通过以下符号进行表示的:

opt {
  <交互语句>
}

请参考下面的示例:

代码:

zenuml
    "张三"->"王五": 王老师,最近过得怎么样?
    "王五"->"张三":不是很好┭┮﹏┭┮
    opt {
      "王五"->"张三": 谢谢关心!
    }

在这里插入图片描述

并行

可以展示并行发生的操作。

这是通过以下符号表示的:

par {
  <交互语句1>
  <交互语句2>
  <交互语句3>
}

请参考下面的示例:

代码:

zenuml
    par {
        "张三"->"王五": 你好,哥们!
        "张三"->"李四": 你好,哥们!
    }

在这里插入图片描述


异常中断

可以在流程中指示序列的停止(通常用于模拟异常情况)。

这是通过以下符号表示的:

try {
  <交互语句>
} catch {
  <交互语句>
} finally {
  <交互语句>
}

请参考下面的示例:

代码:

zenuml
    try {
      "消费者"->"接口": 预定书籍
      "接口"->"书籍服务": 开始预订流程
    } catch {
      "接口"->"消费者": 显示故障
    } finally {
      "接口"->"书籍服务": 回滚状态
    }

在这里插入图片描述

与库和网站集成

Zenuml使用实验性的惰性加载和异步呈现功能,这些功能在未来可能会发生变化。

您可以使用此方法将包含Zenuml图表的mermaid添加到网页中:

<script type="module">
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
  import zenuml from 'https://cdn.jsdelivr.net/npm/@mermaid-js/mermaid-zenuml@0.1.0/dist/mermaid-zenuml.esm.min.mjs';
  await mermaid.registerExternalDiagrams([zenuml]);
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态规划_可视化校园导航Floyd算法应用

目录 引言 图片展示 视频展示 针对校园导航问题的分析 关键技术和算法介绍 详细介绍&#xff1a;算法的实现 总结 代码 附件&#xff1a;Map.png 引言 本文主要通过详细的程序打印和作者的推理过程&#xff0c;描述作者对Floyd算法的理解&#xff0c;阐述其中的动态规划思想是如…

突然发现CSDN变得不一样了【建议】【活动】

突然发现CSDN变得不一样了【活动】 前言推荐突然发现CSDN变得不一样了关于上传代码包关于上传视频关于运行代码关于插入代码1关于插入代码2关于社区的建立关于社区的管理关于此次活动的评选关于排行突然发现说明一下关于我 最后 前言 2023-6-19 23:34:04 本文章仅用于参加 20…

【Python 随练】年龄计算问题

题目&#xff1a; 有 5 个人坐在一起&#xff0c;问第五个人多少岁&#xff1f;他说比第 4 个人大 2 岁。问第 4 个人岁数&#xff0c;他说比第3 个人大 2 岁。问第三个人&#xff0c;又说比第 2 人大两岁。问第 2 个人&#xff0c;说比第一个人大两岁。最后问第一个人&#x…

C++基础(8)——类和对象(6)

前言 本文主要介绍了C中多态的基本知识 4.7.1&#xff1a;多态的基本概念和原理剖析 1&#xff1a;基本概念 静态多态&#xff1a;函数重载、运算符重载 动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态在编译阶段确定函数地址&#xff1b;动态多态在运行阶段…

微信小程序uniapp+springboot实现小程序服务通知

微信小程序uniappspringboot实现小程序服务通知 1. 实现效果 2. 模板选用及字段类型判断 2.1 开通订阅消息,并选用模板 如果点击订阅消息让开启消息订阅开启后就可以出现以下页面,我本次使用的模板是月卡到期提醒模板,点击选用即可 2.2 查看模板字段类型 TemplateId后续会使用…

面试官问:Redis 分布式锁如何自动续期?

资深面试官&#xff1a;你们项目中的分布式锁是怎么实现的&#xff1f; 老任&#xff1a;基于redis的set命令&#xff0c;该命令有nx和ex选项。 资深面试官&#xff1a;那如果锁到期了&#xff0c;业务还没结束&#xff0c;如何进行自动续期呢&#xff1f; 老任&#xff1a;…

第九章 番外篇:TORCHSCRIPT

下文中的代码都使用参考教程中的例子。 会给出一点自己的解释。 参考教程&#xff1a; 文章目录 Introduction复习一下nn.Module()Torchscripttorch.jit.ScriptModule()torch.jit.script()torch.jit.trace()一个小区别 使用示例tracing Modulesscripting ModuleMixing scripti…

乐鑫线上研讨会|探索 LCD 屏在物联网中的发展趋势

LCD 屏通过显示实时信息并提供交互式体验&#xff0c;现已成为各类设备的重要组成部分。在当下的 AIoT 时代&#xff0c;随着物联网技术的快速发展和应用场景的不断拓展&#xff0c;LCD 作为人机交互的主要输入输出设备&#xff0c;在智能家居、智能安防、工业控制、智慧城市等…

C#开发的OpenRA游戏之建造物品的窗口5

C#开发的OpenRA游戏之建造物品的窗口5 前面分析了TAB窗口的建立和运行,现在关注它的子窗口,也就是ProductionPaletteWidget类实现的窗口,这个窗口主要用来显示所有可以创建物品的ICON图标。用户可以通过这个窗口实现物品创建,如下图所示: 比如要创建电厂,就是点击上面…

【好书精读】网络是怎样连接的 之 创建套接字

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 协议栈的内部结构 套接字的实体就是通信控制信息 真正的套接字 调用 socket 时的操作 从应用程序收到委托后 &#xff0c; 协议栈通过 TCP 协议收发数据的操作可以分为 4 个阶段 。 首先是创 建套接字 &…

SothisAI创建容器和conda环境

1.创建容器&#xff08;设置torch版本&#xff0c;cuda&#xff0c;python版本等等&#xff09;后进入web shell 2.shell里输入ssh username&#xff08;你自己的用户名&#xff09; IP&#xff08;你创建的实例的ip地址&#xff09; 3.在web平台创建你自己的文件夹 4.shel…

小程序请求封装、使用

小程序请求封装 1、要了解方法 1.1、wx.request() wx.request 发起 HTTPS 网络请求。&#xff08;详情点击wx.request查看官方文档&#xff09; 1.2、wx.showModal() wx.showModal 显示模态对话框。&#xff08;详情点击wx.showModal查看官方文档&#xff09; 1.3、wx.sho…

Swift 周报 第三十一期

文章目录 前言新闻和社区注册 WWDC23 实验室和活动Apple Vision Pro 和 visionOS 撼世登场App Store 中新增的隐私功能 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十二期&#xff0c;每个模块已初步成型。各位读者如果…

奇数分频器电路设计

目录 奇数分频器电路设计 1、奇数分频器电路简介 2、实验任务 3、程序设计 3.1、7分频电路代码 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 4、用状态机实现7分频电路设计 4.1、代码如下&#xff1a; 4.2、使用状态机的好处 奇数分频器电路设计 前面一节我…

前端JS限制绕过测试-业务安全测试实操(17)

前端JS限制绕过测试,请求重放测试 前端JS限制绕过测试 测试原理和方法 很多商品在限制用户购买数量时,服务器仅在页面通过JS脚本限制,未在服务器端校验用户提交的数量,通过抓取客户端发送的请求包修改JS端生成处理的交易数据,如将请求中的商品数量改为大于最大数限制的值…

Vue中使用分布式事务管理解决方案

文章目录 分布式事务管理是什么优点&#xff1a;缺点&#xff1a;弥补缺点的方法有&#xff1a; 解决方案 分布式事务管理是什么 分布式事务管理是指在分布式系统中对跨多个数据库或服务的操作进行协调和保证一致性的机制。在分布式环境下&#xff0c;由于涉及到多个独立的资源…

半年面试12家大厂,我总结出了这份2023版互联网大厂(Java岗)面试真题汇总

Java面试 现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的IT行业越来越卷。身为Java程序员的我们就更不用说了&#xff0c;上班8小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&am…

docker 命令解释 - nginx镜像制作

目录 Dockerfile 部分命令解释 1、ENTRYPOINT 而ENTRYPOINT 语言 CMD的区别 1、docker run 启动容器的时候&#xff0c;可以传递参数进入给ENTRYPOINT里面的命令&#xff08;-e&#xff09; 2、当2者都存在的时候&#xff0c;CMD里的内容会成为 ENTRYPOINT 里的参数&#x…

Pytest中断言的重要性

目录 前言 pytest断言 增加断言详细信息 异常断言 .type .value .traceback pytest常用断言 前言 在pytest中&#xff0c;断言是非常重要的一部分。断言可以帮助我们验证代码的正确性&#xff0c;检查函数返回的值是否符合要求&#xff0c;以及判断程序中预期行为是否发生。如…

MySQL数据库(二)

前言 本文是关于MySQL数据库的第二弹。 临时表不受原表数据类型的约束&#xff01;&#xff01; SQL语法不区分大小写。 一、列的使用 &#xff08;一&#xff09;列的增加 1、全列插入 insert into 表名 values (数据,数据); 也可以同时插入多条数据: insert into 表名 va…