目录
一、什么是EA?
二、安装EA
三、为什么要学会用EA?
四、创建EA工程
五、创建类视图,构建类和接口
六、选中模型目录,自动检出Java代码
七、构建内部类
八、趁热打铁,构建数据表视图并检出SQL脚本
九、导入源码目录,逆向生成EA类视图
十、其他UML建模视图不再陈述
一、什么是EA?
Enterprise Architect 是Sparx Systems 公司的旗舰产品。它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件和布局,系统管理,非功能需求,用户界面设计,测试和维护等。
-- -- 摘自百度百科
比Rose还要强大的UML建模工具,安装后,整体UI风格如下:
二、安装EA
百度网盘链接:百度网盘 请输入提取码
提取码:umvh
本篇用到的test.eapx和mybatis.eapx工程下载地址:
test.eapx工程下载地址:
链接:百度网盘 请输入提取码
提取码:kvxy
mybaits.eapx工程下载地址:
链接:https://pan.baidu.com/s/1_vd7WDXaVxW-M3TuOM885A
提取码:ef77
三、为什么要学会用EA?
我直接用三个反问句吧,直接明了:
1、你还在没经过设计就直接敲代码吗? 设计先行的理念哪去了?
2、你难道不想要有一种工具,可以把你设计的东西直接转换成代码或者sql语句,以减轻你的工作量吗?
3、你难道不想要有一种工具可以直接将第三方开源框架的源码逆向生成类视图便于查看和存档吗?比如Spring、SpringBoot、Mybatis、Dubbo、Netty等框架的源码包。
4、你想一直都敲代码吗?程序员可不是吃青春饭的,时间久了,就该要好好考虑转变开发角色的事情了。
5、其他...... .......
四、创建EA工程
(1)新建工程,命名为test(.eapx)
(2)创建视图
举个例子:
右键选择添加:
案列效果:
从左至右,依次是:工程的目录结构,主视图窗口,属性面板(设置对象的属性值)
五、创建类视图,构建类和接口
我们不使用案列带的Diagrams例子,直接新建一个package,在package下添加我们需要的类
(1)创建一个包,命名为类视图
(2)在构建的包(目录)下面添加一个视图
(3)选择Class(类)
(4)瞅准工具箱(Toolbox,往视图面板上拖类和接口组件)
工具箱的位置:Design-->Toolbox
(5)拖入两个类和一个接口(一个子类,一个抽象超类,一个接口)
(6)给类或接口添加说明(标注)
(7)改变字体大小
(8)废话不多说,直接构建关系,看效果
(9)给QQPlayer类添加属性字段
添加一个name字段:
添加方法playMovies():
调整变量或方法的“出场”顺序:
(10)标识类为抽象类
抽象类的字体是倾斜的,如下:
(11)至此,类和接口的简单使用结束
难点在于:关系的认知,比如哪根线表示继承,哪根线又表示实现等;如何给类添加字段和方法;如何标识类为抽象类;
六、选中模型目录,自动检出Java代码
(1)改变类视图的目录(包)结构如下(第五步的结果一定要记得保存!!!)
(2)见证奇迹,检出代码
勾选选项(配置一下)如下:
勾选 Include all Child Packages
点击Generate按钮,成功了即可看到如下:
(3)回到桌面,检查上一步自动生成的代码是否OK
目录结构很package,很ok,就是不知道代码是否也ok呢?
(4)检查下代码,看一下QQPlayer类是否继承和实现都体现在代码里了
就连抽象类Mp3也是很ok的
七、构建内部类
7.1 首先定义三个类
7.2 然后补全成员变量,比如属性字段、方法等
7.3 接下来,先随便从工具箱选根线(因为工具箱没有放Nesting·嵌套的线)分别对Builder和ResultCode进行连线如下
7.4 然后,选中其中一根线,右键:Advanced->change Type....
7.5 在连接类型下拉框中选择:Nesting
7.6 两边都修改后,效果如下
7.7 生成代码,看下效果
package 类视图.com.appleyk.model;
/**
* 请求响应结果封装
* @author appelyk
* @version 1.0
* @created 24-十二月-2020 14:08:25
*/
public class TResult {
/**
* 请求响应结果构建器
* @author appleyk
* @version 0.1.1
* @created 24-十二月-2020 14:08:25
*/
public class Builder {
private int status;
private String message;
private Object data;
public Builder(){
}
public void finalize() throws Throwable {
}
/**
*
* @param status
*/
private GxResult.Builder status(int status){
return null;
}
/**
*
* @param message
*/
private GxResult.Builder message(String message){
return null;
}
/**
*
* @param data
*/
private GxResult.Builder data(Object data){
return null;
}
}//end Builder
/**
* 请求响应结果状态码
* @author appleyk
* @version 0.1.1
* @created 24-十二月-2020 14:08:25
*/
public enum ResultCode {
SUCCESS,
FAIL;
/**
* 结果状态码
*/
private final int code;
/**
* 结果状态码描述
*/
private final String description;
}
/**
* 响应状态
*/
private int status;
/**
* 响应消息
*/
private String message;
/**
* 响应结果
*/
private Object data;
/**
* 响应时间
*/
private Date timestamp;
public TResult(){
}
public void finalize() throws Throwable {
}
public static TResult ok(){
return null;
}
/**
*
* @param status
* @param message
* @param data
*/
public static TResult ok(int status, String message, Object data){
return null;
}
}//end TResult
7.8 去掉生成代码中的
public void finalize() throws Throwable {
}
(1) Code->Options->Edit Code Templates
(2)锁定到Class Body模板中的第22到25行,将其清除掉,并保存
(3)保存后再次生成code,就ok了
package 类视图.com.appleyk.model;
/**
* 请求响应结果封装
* @author appelyk
* @version 1.0
* @created 24-十二月-2020 14:20:27
*/
public class TResult {
/**
* 请求响应结果构建器
* @author appleyk
* @version 0.1.1
* @created 24-十二月-2020 14:20:27
*/
public class Builder {
private int status;
private String message;
private Object data;
public Builder(){
}
/**
*
* @param status
*/
private GxResult.Builder status(int status){
return null;
}
/**
*
* @param message
*/
private GxResult.Builder message(String message){
return null;
}
/**
*
* @param data
*/
private GxResult.Builder data(Object data){
return null;
}
}//end Builder
/**
* 请求响应结果状态码
* @author appleyk
* @version 0.1.1
* @created 24-十二月-2020 14:20:27
*/
public enum ResultCode {
SUCCESS,
FAIL;
/**
* 结果状态码
*/
private final int code;
/**
* 结果状态码描述
*/
private final String description;
}
/**
* 响应状态
*/
private int status;
/**
* 响应消息
*/
private String message;
/**
* 响应结果
*/
private Object data;
/**
* 响应时间
*/
private Date timestamp;
public TResult(){
}
public static TResult ok(){
return null;
}
/**
*
* @param status
* @param message
* @param data
*/
public static TResult ok(int status, String message, Object data){
return null;
}
}//end TResult
八、趁热打铁,构建数据表视图并检出SQL脚本
(1)创建Data Modeling
点击ok完成后,效果如下:
(2)基于PostGreSql,构建一张表和一个ID自增序列
(3)给User表添加列
添加id、name、age、sex等(简单意思下就行):
(4)最终视图效果如下
(5)自动检出sql脚本(操作和生成代码有点区别)
选中所有元素(对象):
选中后效果如下:
(6)Generate后,桌面验证SQL脚本
查看内容:
(7)PostGreSql数据库验证一下,SQL脚本是否可用
刷新一下,查看构建的user表:
使用下刚才创建的user_id序列: