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

news2024/11/16 1:34:13

目录

前言

一、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.coloradmin.cn/o/854911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Endnote插入生成参考文献的四种方式

Endnote插入生成参考文献的四种方式 为了熟练Endnote进行在word中插入参考文献,本文介绍四种插入生成参考文献的四种方式。 一、采用Endnote插入按钮方式生成 word选中插入参考文献位置—转入endnote—选中要插入的文献—点击Endnote插入按钮,过程如图…

Java数据类型,一文带你彻底拿捏~

——Java中运算符是一种特殊的符号,用来进行数据的运算、赋值和比较等 思维导图 一.算术运算符 1.什么是算术运算符 ——算术运算符是用于数据类型值之间,使用2个或以上的数据进行运算 2.算术运算符概括 算术运算符 解释示例,-正号&…

CMake:检测python模块和包

CMake:检测python模块和包 导言项目结构CMakeLists.txt相关源码 导言 上一篇,我们基本了解了如何去检测python的解释器和python库。通常,代码是依赖于特定的python模块,无论是python工具、嵌入python的程序,还是扩展python的库。…

Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)

一、背景 本章讲述的是在用户下单环节,消息服务器RabbitMQ 的应用 1.1 消息服务器的应用 在写一个电商项目的小demo,在电商项目中,消息服务器的应用: 1、订单状态通知:当用户下单、支付成功、订单发货、订单完成等…

训练、验证和测试一句话搞懂

文章目录 训练集(training dataset)验证集(validation dataset)测试集(test dataset)训练集可划分为训练集和验证集二二六,一一八,一一一百 训练集(training dataset) 类比课堂知识,训练模型得…

Python中enumerate用法详解

目录 1.简介 2.语法 3.参数 4.返回值 5.详解 6.实例 7.补充 1.简介 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 2.语法 以下是 enumerate() 方法的语…

勘探开发人工智能应用:人工智能概述

0 提纲 机器学习、深度学习、计算机视觉等技术已在勘探开发、油气生产、炼油炼化、经营管理等重点环节进行应用与推广。请思考: 输入:数据是什么(数字、文本、图)?如何理解数据?如何清洗数据?(需要专业领域知识)输出&…

鉴权服务-天G报错引发的感想:一定要有如果报错的预案

今天是HW第一天,下午运维人员说鉴权服务上不去了,看了眼天宫,结果重启了,后来的情况就是20多分钟半小时一重启,真么神奇。开始排查原因: 1、前两天发版换的agent版本发布,但是不知道有没有这个…

【Winform学习笔记(六)】warning MSB3274:引用dll版本冲突

warning MSB3274:引用dll版本冲突 前言正文1、解决方法 前言 在本文中主要介绍 解决 类库编译 Warning MSB3274 的方法; 在项目中引用了自定义控件库,界面设计时可以正常放置删除控件,但启动时会报异常; 编译提示&…

Selenium 是什么?简单明了的介绍

Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具,是一款 自动化测试 工具,使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing,各种支持如下列表: UI 元素的支持与管理:自写代码实现浏览器支…

(八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

文章目录 1 前言2 st.image:嵌入图像内容2.1 图像展示与描述2.2 调整图像尺寸2.3 使用本地文件或URL 3 st.audio:嵌入音频内容3.1 播放音频文件3.2 生成音频数据播放 4 st.video:嵌入视频内容4.1 播放视频文件4.2 嵌入在线视频 5 结语&#x…

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…

JavaWeb(11)——前端综合案例5(小黑记事本)

一、实例需求 ⌛ 功能需求&#xff1a; ① 列表渲染 ② 删除功能 ③ 添加功能 ④ 底部统计 和 清空任务 二、代码实现 ☕ <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <meta http-equiv"X-UA-Compa…

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host&#xff0c;不应该填真实的host地址&#xff0c;而应该填localhost或者127.0.0.1 具体操作步骤见下图

swagger 3.0 学习笔记

引入pom <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置 import io.swagger.models.auth.In; import io.swagger.v3.oas.annotati…

SpringBoot Thymeleaf模板引擎

Thymeleaf 模板引擎 前端交给我们的页面&#xff0c;是html页面。如果是我们以前开发&#xff0c;我们需要把他们转成jsp页面&#xff0c;jsp好处就是当我们查出一些数据转发到JSP页面以后&#xff0c;我们可以用jsp轻松实现数据的显示&#xff0c;及交互等。 jsp支持非常强大…

1077 Kuchiguse

PTA | 程序设计类实验辅助教学平台 一个测试点没过&#xff0c;不知道哪的原因 #include<bits/stdc.h> using namespace std; const int N210; int n; string s[N]; string str[N]; string ans; int main() {int len300;scanf("%d",&n);getchar();for(int…

[C初阶笔记]P1

什么是C语言 1、机器语言&#xff08;二进制&#xff09;>汇编语言&#xff08;助记符&#xff09;>高级语言&#xff08;C、C等&#xff09; 2、c语言擅长底层软件开发&#xff08;操作系统、驱动程序&#xff09;&#xff0c;并不意味着不能开发其他。 C语言更贴近操作…

linux挂载sd卡

1、确定设备名&#xff1a;打开终端窗口&#xff0c;运行以下命令来查看已连接的存储设备列表 rootws:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTmmcblk1 179:0 0 7.3G 0 disk |-mmcblk1p1 179:1 0 70M 0 part -mmcblk1p2 179:2 0…

用datagrip远程连接mysql超时怎么解决【连接mysql会遇到的坑】

目录 一.开放端口 【1】在linux打开防火墙或开放3306端口&#xff08;其实一般情况下服务器里的防火墙并没有开启&#xff09;​编辑 【2】在控制台的云安全组里开放端口 二.修改datagrip连接时高级的useSSL属性 先填好主机&#xff08;就是IP地址&#xff09;和端口&#…