数据设计与正反向工程潘正军pzj@sise.com.cn13928748182组件节点组件图部署图回顾对象持久化实体类与数据表的映射关系的映射双向工程介绍Java代码生成逆向工程主要内容存储:对象的持久化问题文件各种格式的文件(.txt,.ini…)关系数据库(RDBMS)(最常用)面向对象数据库(OODBMS)关系数据库正在向对象-关系数据库发展Oracle的可变数组、嵌套表用关系数据库来存储对象你想把车停在一个面向对象的车库里。把车开进车库,下车,关上车门,然后回到你的房间。当你想出去的时候,只要走进车库,钻进汽车,启动,然后开走你想把车停在一个关系数据库的车库里把车开进车库,下车,卸下车门,将它们放在地上;卸下所有的车轮,将它们放到地上;卸下保险杠及其它的东西。然后回到你的房间。当你想出去的时候,走进车库,先安上车门,再安上保险杠,然后是车轮等等,都安完了,钻进汽车,点火,然后开走实体类映射为关系数据库映射类和属性映射泛化关系?映射泛化关系-1只为超类建一张表优点:只有一张表能实现角色变化报表操作简单缺点:子类的修改会影响到整个结构数据库存在大量空值,浪费空间映射泛化关系-2每个子类映射一张表优点:表中包含了具体子类的所有信息缺点:超类的修改会影响到所有子类表角色变化时,会造成ID的重新赋值支持多重角色时,数据完整性难以维护映射泛化关系-3优点:弹性最好缺点:表的数量多访问数据的时间稍长超类子类都映射成表,超类主键作为所有类的主键映射关联关系-1对0..11对0..1关系:外键放在0..1端映射关联关系-1对11对1关系:外键放在任意一端映射关联关系-1对多1对多关系:安排在多的一端映射关联关系-多对多多对多关系:添加第三个表映射聚合/组合关系映射规则同二元关联映射反身关联(聚合)主键的选择在能单一标识记录的字段中挑选有意义的字段作为主键(学号,工号)另外增加无意义字段作为主键(代理主键)思考:主键的选择一个企业组织,“职员”应该用什么作为主键?姓名工号(03012045)身份证号(360405790718203)系统添加的ID主键的作用唯一标识记录被其他表引用为外键主键不应有业务含义有业务含义,意味着可能潜伏着变化任何对主键的修改都可能导致巨大的工作量代理主键每个表的主键都是相同的数据类型表间连接被限定在单个列上,SQL语句的书写不复杂更稳定的设计关于主键利用Rose进行数据库设计利用RationalRose进行数据库建模新建一个基于MSSQL的数据库模型设置语言环境为MSSQL2000数据库在逻辑视图中新建一个schema进行数据库建模前向工程,产生数据库定义脚本由设计类图产生数据库模型数据库设计主要存在的问题每个数据表应该都有一个主键数据库模型中需要定义表的关系(外键FK)数据库模型中注意正确的使用外键来表示表之间的关系利用自动生成后一定要注意修改字段的类型为合适的类型数据表和实体类的区别数据表来自于需要持久化的实体类它们用于不同的场合、阶段;在进行用例设计时,实际使用的应该是实体类数据库设计双向工程介绍双向工程包括正向工程和逆向工程。双向工程提供了一种在描述系统的架构或设计和代码的模型之间进行双向交换的机制。正向工程指从模型直接产生一个代码框架。逆向工程是指将代码转换成模型。CASE工具能够自动进行转换,可以在设计模型和实现模型之间保持一致。模型源代码正向工程逆向工程Java代码生成代码生成(正向工程)是指从Rose模型中的一个或多个类图生成Java源代码的过程。RationalRose正向工程是以组件为中心的。当对一个Java模型元素进行正向工程时,它的特征会映射到对应的Java语言的结构。Rose提供了一个工具,它能够使代码与UML模型保持一致。“CodeGeneration”详解IDE:指定与Rose相关联的Java开发环境。DefaultDataTypes:设置缺省数据类型。Prefixes:设定缺省前缀(如果有的话)GenerateRoseID:在代码中为每个方法都加一个唯一的标识符。GenerateDefaultReturnLine:在每个类声明后面都生成一个返回行。StoponError:在遇到第一个错误就停止CreateMissingDirectories:生成没有定义的目录。AutomaticSynchronizationMode:自动保持代码与模型同步,ShowProgressIndicator:在遇到复杂的同步操作时显示进度栏。SourceCodeControl:对哪些文件进行源码控制。PutsourcecodeoftheprojectunderSourceControl:使用RoseJ/CMIntegration对Java源代码进行版本控制。InputCheckin/Checkoutcomment:需要对检入/检出代码的活动进行说明。SelectSourceRootPathforSourceControl:选择存放生成的代码文件的地方。代码生成的步骤将Java类加入模型中的Java组件语法检查设置“Classpath”设置“CodeGeneration”参数备份文件生成Java代码正向工程(forwardengineering)正向过程是通过到实现语言的映射而把模型转换为代码的过程。利用Rose工具生成代码框架的基本步骤:(1)检查模型(2)创建组件(3)将类映射到组件(4)设置代码生成属性(5)选择类,组件和包(6)生成代码反向工程反向工程是分析Java代码,然后将其转换到Rose模型的类和组件的过程。RationalRose允许从Java源文件(.java文件)、Java字节码(.class文件)以及一些打包文件(.zip、.cab、.jar文件)中进行逆向工程。逆向工程(ReverseEngineering)利用Rose工具实施逆向工程①使用逆向工程选项“Tools-Java-ReverseEngineer…”;②使用逆向工程选项可以解决从源代码到模型的同步问题。选择刚刚修改过的Reader.java文件,按下“Reverse”按钮。完成后,按下“Done”按钮关闭逆向工程窗口。③在浏览窗口中,展开LogicView下的Reader类,可以发现新增加的方法,已经在模型得到体现;反向工程过程设置或检查CLASSPATH环境变量。启动逆向工程。创建和修改类图和组件图。浏览和扩展源文件。对象持久化双向工程小结生成代码实验数据建模实验12