1. 首页

安利一个IDEA骚操作之一键生成方法的序列图

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

  1. 阅读别人的代码
  2. 阅读框架源码
  3. 阅读自己很久之前写的代码。

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

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

何为序列图?

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

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

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

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

再举两个例子来说一下!

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

img

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

安利一个IDEA骚操作之一键生成方法的序列图

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

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

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

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

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

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

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

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

并且,你还可以:

  1. 点击时序图中的类/方法即可跳转到对应的地方。
  2. 从时序图中删除对应的类或者方法。
  3. 将生成的时序图导出为 PNG 图片格式。

安装

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

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

安利一个IDEA骚操作之一键生成方法的序列图

简单使用

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

安利一个IDEA骚操作之一键生成方法的序列图

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

安利一个IDEA骚操作之一键生成方法的序列图

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

安利一个IDEA骚操作之一键生成方法的序列图

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

安利一个IDEA骚操作之一键生成方法的序列图

我的开源项目推荐

  1. JavaGuide :「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!
  2. guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程)
  3. jsoncat :仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架
  4. programmer-advancement :程序员应该有的一些好习惯+面试必知事项!
  5. springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot还有Spring重要知识点)
  6. awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 开源项目集合).

作者:JavaGuide
链接:https://juejin.im/post/6887719053931053064

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:安利一个IDEA骚操作之一键生成方法的序列图

链接:https://www.javascriptc.com/4611.html

« 10分钟彻底搞懂单页面应用路由
正交的 React 组件»
Flutter 中文教程资源

相关推荐

QR code