代码反向生成时序图类图-Visual_Paradigm实践

目录

前言

一、Visual_Paradigm介绍

1、主界面介绍

 2、功能简介

二、基于代码的序列图生成

1、新建VP项目工程

 2、序列图反向生成

三、VP类图生成

1、生成主入口

 四、数据ER模型生成

1、SQL脚本

2、ER反向生成

 总结


前言

        不知道作为研发的小伙伴们,在平时的工作中是否也会遇到这样的需求。由于一些客观因素的原因,我们的项目已经到了开发尾期,需要进行项目验收,但是项目最开始的一些设计工作还没有进行开展,比如再详细设计阶段需要的时序图、类图、数据库模型对应的ER图等等。此时,我们当然可以选择从头开始,毕竟只是UML图,对吧。只需要加上一些工作量而已,只要给时间,一定可以实现的,于是研发的同学就开始了一些巴拉巴拉的工作,没什么技术含量,但占据了不少时间。还有一种就是基于已有的成果,比如代码,有没有一些工具或者方法可以根据代码反向生成时序图、类图等UML图呢?

        本文就带你解决这个痛点,推荐一款在平时工作中可以用到的UML快捷生成软件。助力您文档快速生成,博客将以Java语言为例,重点讲解如何基于Visual_paradigm进行反想时序图、类图以及基于SQL脚本进行ER模型快速构建的介绍。不仅为项目后期提供初期项目设计文档提供一种解决思路,也可以帮助初级程序员从UML的角度深度了解代码的执行逻辑,调用顺序,不失为阅读和理解源码的优良方式。如果对您有帮助,欢迎在评论区留言交流,行文仓促,同时受本人的经验所限,部分观点有不当之处,恳请批评指正。

一、Visual_Paradigm介绍

        Visual_Paradigm(简称VP)是一款包含系统建模、图表绘制、团队协作,等等诸多功能的企业级设计工具。基于Java开发,开源,跨平台,提供了有WindowsLinuxMac等平台客户端。VP底蕴很深,第一个发布版本在2002年,属于老牌建模牌子,前期仅仅只有UML建模功能,但是近几年一直在不停的升级更新,定位已经不仅仅是这么局限了。而且还大力发展在线绘图,Online绘图目前需要翻墙才能访问。

        这款软件是一款商业软件,个人使用可以直接试用,基本的功能都是有的,只是高级功能有一定影响,这里采用Visual_Paradigm_CE_17_0_20230201_Win64.exe版本。

1、主界面介绍

        如果在程序启动的过程中发现,您的软件已经过期,不要紧的,点击下图中红框中的按钮继续使用,口有余量的小伙伴也可以进行付费申请。

 2、功能简介

        这里其实不准备对VP的功能进行完整的介绍,大家安装好软件后可以通过试用的方式进行熟悉和了解。这里仅简单的进行介绍,好让读者有一个简单的了解。

 

UX:主要用于用户使用设计,比如移动端或者PC的页面设计,帮助用户更好的说明系统如何使用,可以对标Axure。(关于UX和CX的区别欢迎各位去查询相关知识)

CX:客户体验或CX覆盖了更广阔的网络,涵盖了客户与企业各个方面的所有互动-包括品牌中的特定产品或他们带来的特定服务。根据这种方式,CX可以信封用户体验。多家企业聘请CX设计师来分析和评估客户对品牌整体的感觉,并改善客户与他们的互动方式。CX考虑了客户对组织的广告策略,品牌信誉,客户服务,价格,交付方式,产品可用性和一般销售过程的看法。您可以在此客户体验入门指南(CX)中找到更多信息。

System Design:主要覆盖了UML的全方面的知识,所有图形。比如用例图、类图、时序图、状态图、活动图、组件图等等,基本常用的UML设计图都在这里完成。

Business Design:主要提供主要业务流程图的设计和实现。

Data Visualization:数据可视化,这里同样提供多种类型的图表实现对数据的可视化分析。可以对标Echarts,DataV的数据可视化产品。

二、基于代码的序列图生成

        这里采用的示例代码以Ruoyi为例,开发语言以JAVA为主,其它的编程语言暂未涉及,但应该是支持的。关于Ruoyi这里不再详细叙述,开源网站上有更详细的介绍。

1、新建VP项目工程

        为了集中管理生成的图件信息,我们在VP软件中新建一个项目。在VP的主界面中,点击项目tab页,点击新增按钮,出现新增页面,填写相关信息后,完成项目的新建。

 信息输入完毕后,点击建立空白项目,完成。在左边的目录树中可以看到这个vp工程目录。

 2、序列图反向生成

        使用工具Tab页中的程序代码功能,选择最后一个下拉菜单,Instant Reverse Java to Sequence Diagram。

 在以下的界面中,选择需要生成序列图的代码目录,以Ruoyi为例,这里选用到src.java目录

 确定后,点击下一步,进入方法选择的界面,选中需要生成的方法后,点击完成。

         点击完成后即可看到如下的时序图,是不是很方便。

 下面是edit的源代码,方便大家对比,Controller的代码还是简单了,下面可以看看Servcie的业务逻辑代码。

/**
* 修改菜单
*/
@RequiresPermissions("system:menu:edit")
@GetMapping("/edit/{menuId}")
public String edit(@PathVariable("menuId") Long menuId, ModelMap mmap)
{
     mmap.put("menu", menuService.selectMenuById(menuId));
     return prefix + "/edit";
}

/**
* 修改保存菜单信息
* 
* @param menu 菜单信息
* @return 结果
*/
@Override
public int updateMenu(Menu menu)
{
   menu.setUpdateBy(ShiroUtils.getLoginName());
   return menuMapper.updateMenu(menu);
}

三、VP类图生成

        其实VP不仅可以实现序列图的生成,也支持类图的生成。同样是以Ruoyi的代码为例。

1、生成主入口

        在VP工程的左侧菜单中,选择需要生成的目录。这里已Menu包为例生成。

 鼠标右键点击反向工程“menu”to 新增类图,进入生成界面。

 四、数据ER模型生成

        在程序设计过程中,关系型数据库的ER模型也是非常重要的模型,也需要进行ER模型建模表达。如何基于已有的SQL语句进行模型生成呢?VP同样是提供了这样的快速生成的能力。

1、SQL脚本

        这里的SQL脚本采用Ruoyi自带的演示SQL。主要脚本(部分)如下所示:

- ----------------------------
-- 1、部门表
-- ----------------------------
drop table if exists sys_dept;
create table sys_dept (
  dept_id           bigint(20)      not null auto_increment    comment '部门id',
  parent_id         bigint(20)      default 0                  comment '父部门id',
  ancestors         varchar(50)     default ''                 comment '祖级列表',
  dept_name         varchar(30)     default ''                 comment '部门名称',
  order_num         int(4)          default 0                  comment '显示顺序',
  leader            varchar(20)     default null               comment '负责人',
  phone             varchar(11)     default null               comment '联系电话',
  email             varchar(50)     default null               comment '邮箱',
  status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time 	    datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  primary key (dept_id)
) engine=innodb auto_increment=200 comment = '部门表';

-- ----------------------------
-- 初始化-部门表数据
-- ----------------------------
insert into sys_dept values(100,  0,   '0',          '若依科技',   0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(102,  100, '0,100',      '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(103,  101, '0,100,101',  '研发部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(104,  101, '0,100,101',  '市场部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(105,  101, '0,100,101',  '测试部门',   3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(106,  101, '0,100,101',  '财务部门',   4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(107,  101, '0,100,101',  '运维部门',   5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(108,  102, '0,100,102',  '市场部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
insert into sys_dept values(109,  102, '0,100,102',  '财务部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);


-- ----------------------------
-- 2、用户信息表
-- ----------------------------
drop table if exists sys_user;
create table sys_user (
  user_id           bigint(20)      not null auto_increment    comment '用户ID',
  dept_id           bigint(20)      default null               comment '部门ID',
  login_name        varchar(30)     not null                   comment '登录账号',
  user_name         varchar(30)     default ''                 comment '用户昵称',
  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户 01注册用户)',
  email             varchar(50)     default ''                 comment '用户邮箱',
  phonenumber       varchar(11)     default ''                 comment '手机号码',
  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
  avatar            varchar(100)    default ''                 comment '头像路径',
  password          varchar(50)     default ''                 comment '密码',
  salt              varchar(20)     default ''                 comment '盐加密',
  status            char(1)         default '0'                comment '帐号状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  login_ip          varchar(128)    default ''                 comment '最后登录IP',
  login_date        datetime                                   comment '最后登录时间',
  pwd_update_date   datetime                                   comment '密码最后更新时间',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default null               comment '备注',
  primary key (user_id)
) engine=innodb auto_increment=100 comment = '用户信息表';

2、ER反向生成

        在Tab页中,选择DB,DDL反向工程下拉菜单。

         选择好需要生成的sql后,需要注意的是要设置好数据库版本和编码信息,尤其是编码信息,编码设置不对可能导致模型无法生成或者有乱码的情况出现。

 

        点击确定按钮后,就会在主页面中生成整个数据库的ER模型,是不是非常方便。

 总结

        以上就是本文的主要内容,本文主要详细讲解一款UML快捷生成软件工具,助力文档快速生成,以Java语言为例,重点讲解如何基于Visual_paradigm进行反想时序图、类图以及基于SQL脚本进行ER模型快速构建的介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【信号生成器】从 Excel 数据文件创建 Simulink 信号生成器块研究(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

一、初识 Spring MVC

文章目录 一、初始 Spring MVC1.1 回顾 MVC 模式1.2 回顾 Servlet 一、初始 Spring MVC 什么是 Spring MVC Spring MVC就是一个 Spring 内置的 MVC 框架。 MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化等等),而且使用…

(学习笔记-进程管理)进程调度

进程都希望自己能够占用CPU进行工作,那么这涉及到前面说过的进程上下文切换。 一旦操作系统把进程切换到运行状态,也就意味着该进程占用着CPU在执行,但是操作系统把进程切换到其他状态的时候,就不能在CPU中执行了,于是…

Python-OpenCV中的图像处理-物体跟踪

Python-OpenCV中的图像处理-物体跟踪 物体跟踪 物体跟踪 现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的…

机器学习笔记之优化算法(十一)梯度下降法:凸函数VS强凸函数

机器学习笔记之优化算法——梯度下降法:凸函数VS强凸函数 引言凸函数:凸函数的定义与判定条件凸函数的一阶条件凸函数的梯度单调性凸函数的二阶条件 强凸函数强凸函数的定义强凸函数的判定条件强凸函数的一阶条件强凸函数的梯度单调性强突函数的二阶条件…

postman如何添加token

参考博客:https://blog.csdn.net/Mrbignose/article/details/107237581 1.添加token: 2.设置token: 3.发送时携带token:

爬虫程序中使用爬虫ip的优势

作为一名爬虫技术员,我发现在爬虫程序中使用代理IP可以提升爬取效率和匿名性。今天,我就来详细讲解一下代理IP在爬虫程序中的工作原理及应用。 首先,我们来了解一下代理IP在爬虫程序中的工作原理。当我们使用爬虫程序进行数据采集时&#xf…

AIGC:【LLM(五)】——Faiss:高效的大规模相似度检索库

文章目录 一.简介1.1 什么是Faiss1.2 Faiss的安装 二.Faiss检索流程2.1 构建向量库2.2 构建索引2.3 top-k检索 三.Faiss构建索引的多种方式3.1 Flat :暴力检索3.2 IVFx Flat :倒排暴力检索3.3 IVFxPQy 倒排乘积量化3.4 LSH 局部敏感哈希3.5 HNSWx 一.简介…

objectMapper.getTypeFactory().constructParametricType 方法的作用和使用

在使用 Jackson 库进行 JSON 数据的序列化和反序列化时,经常会使用到 ObjectMapper 类。其中,objectMapper.getTypeFactory().constructParametricType 方法用于构造泛型类型。 具体作用和使用如下: 作用: 构造泛型类型&#x…

分支和循环语句(2)(C语言)

目录 do...while()循环 do语句的语法 do语句的特点 do while循环中的break和continue 练习 goto语句 do...while()循环 do语句的语法 do 循环语句; while(表达式); do语句的特点 循环至少执行一次,使用的场景有限,所以不是经常使用。 #inc…

stm32 cubemx can通讯(1)回环模式

文章目录 前言一、cubemx配置二、代码1.过滤器的配置(后续会介绍)2.main.c3.主循环 总结 前言 介绍使用stm32cubemx来配置can,本节讲解一个简答,不需要stm32的can和外部连接,直接可以用于验证的回环模式。 所谓回环模…

Day 19 C++ 文件操作

C 文件操作 文件为什么要使用文件文件类型文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的二进制形式存储在计算机中 操作类型ofstream:写操作ifstream: 读操作fstream : 读写操作 文本文件写文件引入头文件 \&l…

排序(快速排序,归并排序,插入排序,选择排序,冒泡排序,希尔排序,堆排序)

给定你一个长度为 n 的整数数列。 请你对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n 。 第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。 输…

消息队列比较

、ActiveMQ 优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据。 缺点:官方社区现在对ActiveMQ5.X维护越来越少了,高吞吐量场景较少使用。 2、K…

Linux小型操作系统项目,《操作系统真象还原》第三章——完善MBR

前引 上一章我们完成了MBR的雏形编写,但是只打印了几个字符,这一章我们才要真正地去完成MBR的功能。 在完成MBR的功能之前我们要先了解一些知识,首先介绍什么是实模式。 书上的内容实在繁杂,简单地说,实模式没有虚拟和…

VR内容定制 | VR内容中控管理平台可以带来哪些价值?

随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,其中教育领域也不例外。通过VR技术,学生可以身临其境地参与到各种场景中,获得更加直观、生动的学习体验。为了让教师更好地进行VR教学的设计和管理,提高教…

jmeter测试rpc接口-使用dubbo框架调用【杭州多测师_王sir】

1.基于SOAP架构。基于XML规范。基于WebService协议。特点:接口地址?wsdl结尾2.基于RPC架构,基于dubbo协议,thrift协议。SpringCloud微服务。3.基于RestFul架构,基于json规范。基于http协议(我们常用的都是这种,cms平台也是) Rest…

iOS开发-JsonModel的学习及使用

IOS JsonModel的学习及使用 当我们从服务端获取到json数据后的时候,我们需要在界面上展示或者保存起来,下面来看下直接通过NSDictionary取出数据的情况。 NSDictionary直接取出数据的诟病。 NSString *name [self.responseObj objectForKey:"nam…

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

Maven进阶1 -- 分模块开发、依赖管理、聚合与继承、属性、版本管理、多环境开发、跳过测试

目录 1.分模块开发 将原始模块按照功能拆分成若干个子模块&#xff0c;方便模块间的相互调用&#xff0c;接口共享。 案例&#xff1a;拆分一下这个SSM整合案例 ①创建maven模块 demo项目下的pom.xml文件&#xff08;主要看一下依赖&#xff09; <dependencies><!…