代码反向生成时序图类图-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模型快速构建的介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】保姆级详解:Git配置SSH Key(密钥和公钥)到github

博主简介:22级计算机科学与技术本科生一枚🌸博主主页:是瑶瑶子啦每日一言🌼: “当人们做不到一些事情的时候,他们会对你说你也同样不能。”——《当幸福来敲门》 克里斯加德纳 Git配置SSH Key 一、什么是Git?二、什么…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S(DDD with SpringBoot)为本作者使用DDD过程中开发的框架,目前已可公开查看源码&#…

攻防世界-web-shrine

1. 题目描述 打开链接,发现是一串源码: 从源码中不难发现关键词是flask.render_template_string(safe_jinja(shrine)) ,这个函数说明了题目的关键点在于模板渲染,即存在模板注入 2. 思路分析 从代码中不难发现,即使…

探索泛型与数据结构:解锁高效编程之道

文章目录 引言第一部分:了解泛型1.1 为什么使用泛型1.2 使用泛型的好处 第二部分:泛型的使用场景2.1 类的泛型2.2 方法的泛型2.3 接口的泛型 第三部分:泛型通配符3.1 通配符3.2 通配符的受限泛型 第四部分:数据结构和泛型的应用4.…

Spring中的循环依赖问题

文章目录 前言一、什么是循环依赖?二、三级缓存三、图解三级缓存总结 前言 本文章将讲解Spring循环依赖的问题 一、什么是循环依赖? 一个或多个对象之间存在直接或间接的依赖关系,这种依赖关系构成一个环形调用,有下面 3 种方式…

MySQL 事务

目录 一、事务的概念 二、事务的ACID特点 1)事务的原子性 2)事务的一致性 3)事务的隔离性 (1)脏读 (2)不可重复读 (3)幻读 (4) 丢失更…

FFmpeg 使用总结

FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。包括如下几个部分&#xf…

《合成孔径雷达成像算法与实现》Figure3.8

与图3.7的代码区别只在于原始信号的表达式对了一个时间偏移 代码复现如下: clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间 tc …

【Linux】守护进程

1 相关概念 1.1 守护进程的概念 守护进程也叫做精灵进,是运行在后台的一种特殊进程。它独立于控制终端并且可以周期性的执行某种任务或者处理某些发生的事件。 守护进程是非常有用的进程,在Linux当中大多数服务器用的就是守护进程。比如,web…

使用MethodInterceptor和ResponseBodyAdvice做分页处理

目录 一、需求 二、代码实现 父pom文件 pom文件 配置文件 手动注册SqlSessionFactory(MyBatisConfig ) 对象 实体类Users 抽象类AbstractQuery 查询参数类UsersQuery 三层架构 UsersController UsersServiceImpl UsersMapper UsersMapper.…

HOperatorSet.OpenFramegrabber “GigEVision“

HOperatorSet.OpenFramegrabber "GigEVision"访问失败 直接跳出 但其他算子可以访问 重装halcon x86

小程序裂变怎么做?小程序裂变机制有哪些?

做了小程序就等于“生意上门”?其实并不是这样。小程序跟流量平台较为明显的区别就在于小程序并非“自带流量”,而是需要企业利用自己的营销推广能力来建立引流渠道,从而完成用户的拉新和留存、转化。因此,想要用小程序来增加自己…

RaabitMQ(三) - RabbitMQ队列类型、死信消息与死信队列、懒队列、集群模式、MQ常见消息问题

RabbitMQ队列类型 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中,拥有比较高的消息可靠性。 经典队列可以选择是否持久化(Durability)以及是否自动删除(Auto delete)两个属性。 Durability有两个选项,Durable和Transient。 Durable表…

3分钟创建新生分班查询二维码,无需技术、0成本

作为教师,我们深知分班是一项极其重要的任务,需要综合考虑学生的性格、能力和兴趣等多个方面,以确保每个学生都能够获得最佳的学习环境和成绩。在本文中,我将分享一种便捷的方式来告知家长有关分班录取情况的方法。 通常&#xf…

python中 “”和“and”的区别

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 1、“&”和“and”有本质区别,属于不同类型的运行符号。& 是位运算;and 是逻辑运算。 2、首先是&:该运输符属于字符串的连接运算符,例如,“w“&”c…

【LeetCode】数据结构题解(9)[复制带随机指针的链表]

复制带随机指针的链表 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 所属专栏:玩转数据结构题型❤️ 🚀 >博主首页:初阳785❤️ 🚀 >代码托管:chuyang785❤…

el-select与el-tree结合使用,实现select框下拉使用树形结构选择数据

使用el-select与el-tree&#xff0c;实现如下效果&#xff0c; 代码如下&#xff1a; 注意点&#xff1a;搜索input框的代码一点放在option上面&#xff0c;不要放在option里面&#xff0c;否则一点击搜索框&#xff0c;下拉框就会收起来&#xff0c;不能使用。 <el-select…

wxwidgets Ribbon使用wxRibbonToolBar实例

wxRibbonToolBar就是工具栏&#xff0c;一下是实现的效果&#xff0c;界面只是功能展示&#xff0c;没有美化 实现代码如下所示&#xff1a; MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) …

锐捷VSU技术理论与实验

目录 VSU涉及的相关基础概念 VSU的2种工作模式 VSU的3种设备角色 VSU的4种设备状态 VSU的分裂与合并 VSU建立过程 双主检测 VSU报文转发原理 VSU命令配置 配置VSU 配置双主检测 VSU涉及的相关基础概念 域编号&#xff08;Domain ID&#xff09; Domain ID是VSU的标…

【C++】bind包装器

bind包装器 调用bind的一般形式&#xff1a;auto newCallable bind(callable,arg_list); 其中&#xff0c;newCallable本身是一个可调用对象&#xff0c;arg_list是一个逗号分隔的参数列表&#xff0c;对应给定的 callable的参数。 当我们调用newCallable时&#xff0c;newCa…