IDEA一键生成方法的序列图神操作

在平时的学习/工作中,我们会经常面临如下场景:

  • 阅读别人的代码
  • 阅读框架源码
  • 阅读自己很久之前写的代码。

千万不要觉得工作就是单纯写代码,实际工作中,你会发现你的大部分时间实际都花在了阅读和理解已有代码上。

为了能够更快更清晰地搞清对象之间的调用关系,我经常需要用到序列图。手动画序列图还是很麻烦费时的,不过 IDEA 提供了一个叫做SequenceDiagram 的插件帮助我们解决这个问题。通过 SequenceDiagram 这个插件,我们一键可以生成时序图。

何为序列图?

网上对于序列图的定义有很多,我觉得都不太好理解,太抽象了。最神奇的是,大部分文章对于序列图的定义竟然都是一模一样,看来大家是充分发挥了写代码的“精髓”啊!

我还是简单说一说我的理解吧!不过,说实话,我自己对于 Sequence Diagram 也不是很明朗。下面的描述如有问题和需要完善的地方,还请指出。

序列图(Sequence Diagram),亦称为循序图,是一种UML行为图。表示系统执行某个方法/操作(如登录操作)时,对象之间的顺序调用关系。

这个顺序调用关系可以这样理解:你需要执行系统中某个对象 a 提供的方法/操作 login(登录),但是这个对象又依赖了对象 b 提供的方法 getUser(获取用户)。因此,这里就有了 a -> b 调用关系之说。

再举两个例子来说一下!

下图是微信支付的业务流程时序图。这个图描述了微信支付相关角色(顾客,商家...)在微信支付场景下,基础支付和支付的的顺序调用关系。

下图是我写的一个 HTTP 框架中的执行某个方法的序列图。这个图描述了我们在调用 InterceptorFactory类的 loadInterceptors() 方法的时候,所涉及到的类之间的调用关系。

另外,国内一般更喜欢称呼序列图为"时序图"。

  • 如果你按照纯翻译的角度来说, sequence 这个单词并无"时间"的意思,只有序列,顺序等意思,因此也有人说“时序图”的说法是不准确的。
  • 如果从定义角度来说,时序图这个描述是没问题的。因为 Sequence Diagram 中每条消息的触发时机确实是按照时间顺序执行的。

我觉得称呼 Sequence Diagram 为时序图或者序列图都是没问题的,不用太纠结。

哪些场景下需要查看类的时序图?

我们在很多场景下都需要时序图,比如说:

  • 阅读源码 :阅读源码的时候,你可能需要查看调用目标方法涉及的相关类的调用关系。特别是在代码的调用层级比较多的时候,对于我们理解源码非常有用。(题外话:实际工作中,大部分时间实际我们都花在了阅读理解已有代码上。)
  • 技术文档编写 :我们在写项目介绍文档的时候,为了让别人更容易理解你的代码,你需要根据核心方法为相关的类生成时序图来展示他们之间的调用关系。
  • 梳理业务流程 :当我们的系统业务流程比较复杂的时候,我们可以通过序列图将系统中涉及的重要的角色和对象的之间关系可视化出来。
  • ...

如何使用 IDEA 根据类中方法生成时序图?

通过 SequenceDiagram 这个插件,我们一键可以生成时序图。

并且,你还可以:

点击时序图中的类/方法即可跳转到对应的地方。

从时序图中删除对应的类或者方法。

将生成的时序图导出为 PNG 图片格式。

安装

我们直接在 IDEA 的插件市场即可找到这个插件。我这里已经安装好了。

如果你因为网络问题没办法使用 IDEA 自带的插件市场的话,也可以通过IDEA 插件市场的官网手动下载安装。

简单使用

选中方法名(注意不要选类名),然后点击鼠标右键,选择 Sequence Diagram 选项即可!

配置生成的序列图的一些基本的参数比如调用深度之后,我们点击 ok 即可!

你还可以通过生成的时序图来定位到相关的代码,这对于我们阅读源码的时候尤其有帮助!

时序图生成完成之后,你还可以选择将其导出为图片。

(0)

相关推荐

  • IntelliJ IDEA中代码一键生成方法

    之前有不少小伙伴问松哥微人事项目(https://github.com/lenve/vhr) 使用的 MyBatis 逆向工程在哪里?其实旧版微人事当时没有使用逆向工程,是我自己手动敲出来的,当然手动敲的工作量非常大. 今年发出来的新版微人事,我使用了逆向工程自动生成实体类和 dao 层的代码.MyBatis 的逆向工程要么需要添加依赖,要么需要自己去网上下载 jar,用起来还是有点麻烦,所以,今天和小伙伴们介绍一款 IntelliJ IDEA 上的免费开源插件,叫做 EasyCode,可以方便

  • 详述IntelliJ IDEA 中自动生成 serialVersionUID 的方法(图文)

    serialVersionUID介绍 再编程过程中当涉及到对象的传输问题时,我们会采用序列化的技术,通过序列化可以将对象的状态信息转换为可以存储或传输的形式的过程.在Java当中我们可以通过实现Serializable接口来序列化对象,而serialVersionUID就是Java序列化机制中一个不可或缺的角色,可以通过在运行时判断类的serialVersionUID来验证版本一致性.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialV

  • 使用idea插件进行java代码生成的操作

    java代码生成 使用idea的插件codehelper.generator进行代码生成,可以根据entity,生成对应的 1.建表sql语句 2.dao.java文件 3.dao.xml文件 4.service.java文件 同时这个插件还能在new了entity之后生成所有的set方法 多次生成,不会影响自己手动添加的代码 安装 安装插件codehelper.generator 案例 @Data @AllArgsConstructor @NoArgsConstructor public cl

  • Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法

    今天为小伙伴们介绍一款 IntelliJ IDEA 上的免费开源插件,叫做 EasyCode,可以方便的根据数据库生成相应的代码. EasyCode 是基于 IntelliJ IDEA 开发的代码生成插件,支持自定义任意模板(Java,html,js,xml):只要是与数据库相关的代码都可以通过自定义模板来生成:支持数据库类型与 java 类型映射关系配置:支持同时生成生成多张表的代码,张表有独立的配置信息,完全的个性化定义,规则由你设置. 我自己也稍微体验了一把,还是蛮方便的. 1.安装 首先

  • Idea 快速生成方法返回值的操作

    生成前: public static void main(String[] args) { new HashMap<String,Object>(); } 生成方法 生成后 public static void main(String[] args) { HashMap<String, Object> stringObjectHashMap = new HashMap<>(); } 快捷键: Ctrl + Alt + v 补充:idea 自动生成返回值以及返回值的类型

  • IDEA一键生成方法的序列图神操作

    在平时的学习/工作中,我们会经常面临如下场景: 阅读别人的代码 阅读框架源码 阅读自己很久之前写的代码. 千万不要觉得工作就是单纯写代码,实际工作中,你会发现你的大部分时间实际都花在了阅读和理解已有代码上. 为了能够更快更清晰地搞清对象之间的调用关系,我经常需要用到序列图.手动画序列图还是很麻烦费时的,不过 IDEA 提供了一个叫做SequenceDiagram 的插件帮助我们解决这个问题.通过 SequenceDiagram 这个插件,我们一键可以生成时序图. 何为序列图? 网上对于序列图的定

  • Python自动生成代码 使用tkinter图形化操作并生成代码框架

    背景 在写代码过程中,如果有频繁重复性的编码操作,或者可以Reuse的各类代码,可以通过Python写一个脚本,自动生成这类代码,就不用每次手写.或者copy了. 比如新建固定的代码框架.添加一些既定的软件逻辑,通讯协议.消息模板等等,再编写一套代码时,或者一个Function时,每次使通过脚本一键生成代码,就不需要每次都写一遍了,同时可以把相关软件逻辑放进去,也能避免出错. 脚本代码 Demo_CodeGenerator.py 具体详细代码去掉了,大家想生成什么样的代码就在mycode中app

  • VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法

    1. 安装一个插件,识别vue文件 2.新建代码片段 文件–>首选项–>用户代码片段–>点击新建代码片段–取名vue.json 确定 3.粘贴入自己写的.vue模板 { "Print to console": { "prefix": "vue", "body": [ "<!-- $1 -->", "<template>", "<d

  • 机器学习Erdos Renyi随机图生成方法及特性

    目录 1 随机图生成简介 1.1Gnp和Gnm 1.2 生成方法 1.3 两种方法比较 2 Gnp随机图 2.1 只用n和p够吗? 2.2 Gnp的图属性 2.3真实网络和Gnp的对比 3 代码库 参考 1 随机图生成简介 1.1Gnp和Gnm 1.2 生成方法 1.3 两种方法比较 2 Gnp随机图 2.1 只用n和p够吗? n和p并不能完全决定一个图.我们发现即使给定n和p,图也有许多实现形式.如当n=10,p=1/6时,就可能产生如下的图: 2.2 Gnp的图属性 二项分布的离散分布图像如

  • JSP验证码简单生成方法

    本文实例讲述了JSP验证码简单生成方法.分享给大家供大家参考.具体如下: <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc&

  • android中圆角图像生成方法

    本文实例讲述了android中圆角图像生成方法.分享给大家供大家参考.具体分析如下: 在android开发中为了美观,常常要求ImageView中显示出圆角图像的效果,这个如何实现? 这里总结了网上的最优方法:将图像处理成圆角,然后在加载给ImageView显示,代码如下: public Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.get

  • PHP面向对象程序设计之对象生成方法详解

    本文实例讲述了PHP面向对象程序设计之对象生成方法.分享给大家供大家参考,具体如下: 对象 看个例子 <?php abstract class Employee { // 雇员 protected $name; function __construct( $name ) { $this->name = $name; } abstract function fire(); } class Minion extends Employee { // 奴隶 继承 雇员 function fire()

  • 一键生成各种尺寸Icon的php脚本(实例)

    实例如下: <?php /** * @name thumb 缩略图函数 * @param sting $img_name 图片路径 * @param int $max_width 略图最大宽度 * @param int $max_height 略图最大高度 * @param sting $suffix 略图后缀(如"img_x.jpg"代表小图,"img_m.jpg"代表中图,"img_l.jpg"代表大图) * @return void

随机推荐