共计 2077 个字符,预计需要花费 6 分钟才能阅读完成。
在平时的学习 / 工作中,咱们会常常面临如下场景:
- 浏览他人的代码
- 浏览框架源码
- 浏览本人很久之前写的代码。
千万不要感觉工作就是单纯写代码,理论工作中,你会发现你的大部分工夫理论都花在了浏览和了解已有代码上。
为了可能更快更清晰地搞清对象之间的调用关系,我常常须要用到序列图。手动画序列图还是很麻烦费时间的,不过 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 即可!
你还能够通过生成的时序图来定位到相干的代码,这对于咱们浏览源码的时候尤其有帮忙!
时序图生成实现之后,你还能够抉择将其导出为图片。
我的开源我的项目举荐
- JavaGuide:「Java 学习 + 面试指南」一份涵盖大部分 Java 程序员所须要把握的外围常识。筹备 Java 面试,首选 JavaGuide!
- guide-rpc-framework:A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架 - 附具体实现过程和相干教程)
- jsoncat:仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架
- programmer-advancement:程序员应该有的一些好习惯 + 面试必知事项!
- springboot-guide:Not only Spring Boot but also important knowledge of Spring(不只是 SpringBoot 还有 Spring 重要知识点)
- awesome-java:Collection of awesome Java project on Github(Github 上十分棒的 Java 开源我的项目汇合).
我是 Guide 哥,一 Java 后端开发,会一点前端,自在的少年。咱们下期再见!微信搜“JavaGuide”回复“面试突击”支付我整顿的 4 本原创 PDF