一键生成方法的序列图(IDEA骚操作)

小初seo 2021年5月29日14:48:27学习笔记评论593 次浏览1579字阅读5分15秒

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

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

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

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

何为序列图?

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

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

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

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

再举两个例子来说一下!

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

一键生成方法的序列图(IDEA骚操作)

下图是我写的一个 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骚操作)

后记

最近写的一些干货,每篇都很用心,欢迎各位小伙伴阅读/点赞/分享:

小初seo
  • 本文由 发表于 2021年5月29日14:48:27
  • 转载请务必保留本文链接:https://www.pkak.cn/xuexi/4128.html
学习笔记

DOME:又一款功能强大的子域名枚举工具

关于DOME DOME是一款功能强大的子域名枚举工具,该工具是一个快速可靠的Python脚本,可以实现主动或被动扫描,以搜索目标子域名以及开放的端口信息。该工具主要针对漏洞奖励Hunter以及渗透测试...
学习笔记

为什么很多人那么努力,还是赚不到钱?

努力和赚钱之间,估计只有一毛钱的关系。 赚钱有三个层次: 第一个层次,靠勤奋努力挣钱,例如每天准时上班,老实加班,像老黄牛那样勤勤恳恳,不管是打工也好,创业也罢,用体力交换报酬。 第二个层次,靠聪明才...
学习笔记

你是如何寻找自己想获取的信息呢?

1. 先学会正确地提问。能提出好问题,才能得到更好的回答——包括 Google 百度这样的搜索引擎,你也得“问对问题”。 2. 善用搜索引擎。当下搜索引擎里,其实已经有几乎所有问题的答案了,而且还在不...
学习笔记

现在是不是每个人都应该学点编程知识?

有人说,现代年轻人要会三项技能,第一就是英语,第二短视频,第三是编程。 是不是不会编程就容易被社会淘汰呢?是不是每个人都应该学一点编程呢? 你如果不打算找一份程序员的工作,对编程也没有兴趣,就没有必要...
学习笔记

想学习编程,对学历有要求吗?

不单单学编程,学什么对学历都没有要求。 所谓“学历”,我的理解,也就是一个人“学习的历程”,学任何东西,都跟此前的学习历程没多大关系。 有兴趣,愿意付出一万小时学习、练习、实践、思考,就能有所得。
学习笔记

如何确保自己, 未来一定会变得越来越好?

正确的策略应该是: 想办法提前预知自己需要掌握哪些技能, 再确定它们是自己可以通过练习真正熟练掌握的技能, 而后制定长期计划, 一点一点稳步执行。 这个策略, 适合每个人, 每个领域, 每个职业。 嗯...
学习笔记

我们为什么不能输出有价值的干货?

我们为什么不能输出价值干货? 一,没有产出的能力。实践得少,书读得少,做事不思考不总结,是无法产出优质内容的原因。比如我自己,做了5年的记者,现在让我输出这方面内容的干货,我真的写不出。因为我没有意识...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: