PowerDesigner与Rose详解对比(转自woaidongmao)

2024-01-06 03:18

本文主要是介绍PowerDesigner与Rose详解对比(转自woaidongmao),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 二者的出身

  作为世界最著名的两大CASE工具,Rational Rose和PowerDesigner的名声可谓如雷贯耳。Rose是当时全球最大的CASE工具提供商Rational的拳头产品,UML建模语言就是由Rational公司的三位巨头Booch、Rumbaugh和Jacobson发明的,后来Rational被IBM收购,所以Rose 可谓出身名门,嫁入豪族。而PowerDesigner也有一段好玩的历史,作者王晓昀是一位中国人,在法国SDP软件公司工作时,由于苦觅一个好用的CASE工具未果,干脆自由开搞,整了个AMC*Designor出来,居然一炮打响,在法国卖得个“巴黎纸贵”,后来SDP被Powersoft公司收购,同年Sybase这只大黄雀又吃下了Powersoft这只螳螂,所以PowerDesigner也是惊艳出场,星光四射。

  但两者所走的明星路线却很不相同,Rose出道是时,走的是UML面向对象建模,而后再向数据库建模发展,而PowerDesigner则反其道而行之,它先是一个纯粹的数据库建模工具,后来才向面向对象建模,业务逻辑建模及需求分析建模进军,最终变成“演视歌三栖”明星。

  由于第一印象的影响,所以Rose常常给人的印象还是只是面向对象分析设计的工具,而PowerDesigner给人的印象则还停留在数据库建模工具上。其实,现在的Rose和PowerDesigner都即可以进行数据库建模,也可以进行面向对象建模,只是存在支持上的偏重而已。

二、 二者区别概述

  Rose和PowerDesigner虽然在项目分析设计领域已经成为被高度聚光的明星,但是在具体使用哪款工具的问题上,不同的公司,不同的人,出于成本,习惯抑或个人喜好,往往有自己的判断。由于笔者在不同的公司中被分别要求使用Rose或PowerDesigner进行分析设计工作,所以对二者有着较为细致的体验。

  Rose走大而全,一站式的策略,它没有将数据库设计和面向对象设计清晰地分开,仅以不同的目录来区分。而PowerDesigner将两者划分到独立的模型文件中,分别对应不同的设计环境,并通过模型之间的转换工具建立各模型的关联。即使对于数据库设计模型,PowerDesigner也需要你选择一个具体的数据库产品及其版本,以便工作环境对具体数据库敏感。所以Rose显得大而化之,而PowerDesigner则比较精细和具体化。Rose的逆向工程,文档输出,代码生成等输入输出功能上表现得比较生硬单调,PowerDesigner在逆向工程,特别是文档输出和代码生成这些功能上提供了精细的控制,让用户拥有高度的自由度。

  Rose在操作体验上存在很多需要改进的地方,Rose偏向于让用户用鼠标进行操作,对键盘操作支持不好。而PowerDesigner在用户体验上得分很高,大部分操作都可以通过键盘完成,在充分熟悉其快捷键的前提下,PowerDesigner将给设计者一种行云流水的感觉,用户交互上更加人性化。此外,Rose往往占用更多的资源,容易异常退出,PowerDesigner则显得轻便稳定。所以,我个人对两者的体验就是“Rose笨拙,PD利索”。下面将具体列出Rose和PowerDesigner的一系列的区别,相信大家可以借由这些比较而见微知著,窥斑知豹,以资在选择工具时,提供参考。

三、 模型组织和层次结构上的区别

  1、模型组织Rose将数据库模型和对象模型放在一起,在进行数据表模型设计时,没有特性化的东西。而PowerDesigner将两者分开,其模型组织层级关系是:工作空间->模型类型->具体语言/数据库的模型->包->文件夹->Diagram->设计元素。在创建模型文件时,会让你选择模型类型,选择模型类型后,还可以选择模型类型下语言及版本相关的细分类。不同设计模型对应软件工程的不同阶段,如业务模型和需求模型属于项目需求阶段,而对象模型属于概要和详细设计阶段,数据库模型属于详细设计阶段。它们之间虽然有很强的内在联系,但差异性也很明显,硬将两者放到一起,就象把猴子和猩猩关进同一个笼子,为了兼顾和平衡两者之间的考量,其结果是两者都得不到很好的支持。

  clip_image002

  图 1新建模型窗口(PD)

  clip_image003

  图 2新建模型窗口(Rose)

  PowerDesinger可以通过模型转换工具进行数据库建模和面向对象模型的相互转换。但Rose不能将对象转换为表,也不能将表转换为对象。

  2、工作空间PowerDesigner有工作空间的概念,一个工作空间下可以同时打开多个设计模型文件;而Rose同时仅能打开一个设计文件,如果在设计时,需要参考其他的Rose设计模型,则需要反复关闭现有模型,打开参考模型,显得设计上比较欠考虑。这个问题上两者的差异恰似Eclipse和JBuilder的区别,Eclipse可以同时打开多个工程,而JBuilder只能同时打开一个工程。

  3、设计界面PowerDesigner的设计界面可以左右上下移动,而Rose只能向右,向下移动,此外。PowerDesigner可以将模型元素放大很多倍,而Rose只能放大到正常倍数,不过Rose的Overview工具可以使用户快速定位到设计区中特定的区域,有点类似于游戏界面中常用的小地图,挺不错;

  clip_image005

  图 3 Overview工具(Rose)

  而在PowerDesigner中,你可以通过F8快捷键查看Diagram的总览图,不过只得通过放大操作定位到定位区域。

四、对模型和语言的支持

  ? 对设计模型的支持力度和广度

  PowerDesigner对对象模型和数据库建模两者的支持力度已经大抵相等,此外,还支持概念模型、业务模型、需求模型、XML模型、信息流模型、自由模型的分析设计。不过对后面这几个模型的支持比较初级,而且在实际的应用中,这些模型用得也比较少,PowerDesigner的突出亮点还是在数据库建模和对象模型的设计上。

  对于数据库模型,PowerDesigner支持20余种数据库,对于同一数据库的不同版本还提供单独的支持,以便在设计数据库模型时,提供数据库和版本相关的设计。对于面向对象模型,PowerDesigner支持11种主流语言,为对Java 5.0提供单独的支持。

  Rose基本上可以说是一个对象模型设计工具,对数据库模型的支持相对粗糙,内嵌的只支持Oracle 8数据库,对其他数据库设计的支持需要通过安装插件的方式获得,且对数据库物理存储参数等较细粒度的内容支持得比较粗糙。Rose的对象模型主要支持Java、VC和VB三种语言。

  ? 对Java语言的支持

  Rose对Java语言的支持更好,不但为不同版本的JDK提供了支持(不过Rose 2003还不支持JDK 5.0),还为Java具体产品及设计模式(如EJB、Corba、Servlet,GOF设计模式等)提供了内嵌性的支持,这些支持直接反应在Rose的主菜单上。正因为如此,使Rose背上的沉重的历史负担,如EJB和Corba这种语言级的东西是易变且不断更新的,如何在这些具体产品的地位和影响已经降低时,对其作出割舍而又保证版本的兼容性,是摆在设计者面前的难题。

  PowerDesigner仅提供语言级对象设计的支持,不涉及语言内部的具体产品。其次因为它的设计工作区是和具体的模型类型及语言细分类相关的,而非在主菜单中直接提供支持,所以PowerDesigner在升级时显得更加从容一些。

  这也是为什么PowerDesigner能以每年一个版本的速度升级,而Rose在2003版本后,新版本还迟迟投入市场的内在原因,否则以IBM的财力,研发能力不至于对市场反应如果缓慢。

五、输入和输出功能的比较

  ? 反向工程

  从将程序代码转换为设计模型的逆向工程功能上看,Rose更象一个IDE,它会对需要逆向工程操作的程序代码进行深度语义检查,如果存在诸如程序代码引用了类库之外的类,反向工程将失败,而且在报告失败之前,窗口会陷入长时间无响应状态。

  PowerDesigner仅对需逆向工程的程序代码进行浅度语法检查,这种浅度语法检查不涉及包,类之间的关联,仅对诸如类名是否和类文件名匹配,是否少了“}” 等语法性的内容进行检查。即便存在错误,PowerDesigner也允许你忽略错误,继续进行逆向工程操作,这种宽松的限制带来了很大的便利。

  clip_image006

  图 4逆向工程失败选择三种选择(PD)

  忽略错误后,PowerDesigner会尽量修补错误,例如代码中少了对应的“}”,它将会补上,类名和文件名不一致,将忽略类文件名保持类名不变。

  Rose一直宣扬的理念是IDE和设计工程进行双向互通:在Rose中完成模型设计后导出为IDE所用的代码,IDE编码调整后又逆向工程到Rose。理念很美,深具吸引力,但是在实现中,往往很少有开发团队会这样做。一般CASE工具只是在分析设计阶段使用,甚至很大比例的设计师仅把它当成画图的工具。

  真正进入编码开发阶段后,将加入大量设计时不涉及的类和方法,如果将这些非骨架性的东西Reverse到CASE工具中,反而会使原来清晰的设计变得雾里花,水中月。所以即使编码时,需要对原分析模型进行调整,一般也是手工去调整设计模型,而不是通过逆向工程去同步,毕竟分析设计是骨架性的,而编码是血肉性的,两者有属性上的区别。如果真的需要频繁进行的代码和UML转换,最好使用类似于Together一样的工具,它嵌入到IDE中,使代码和模型转换方便快捷。

  ? 文档导出功能

  PowerDesigner对文档导出提供了精细的控制,你不但可以对文档所包含的内容项进行设置,还可以对内容项的格式进行设置。如导出的表结构是否包括名称、数据类型、备注等项目,这些项目在表栏中的宽度占比,颜色,字号等等,不一而足。

  PowerDesinger 12.0 还新增了一个多模型文档整合导出的Milti-Model Report模型,允许你以多个模型作为输入生成为统一文档,实现模型设计按阶段分开,文档又统一整合的目的。

  由于PowerDesigner文档导出的设置非常精细,所以要设置好一个文档导出模式实非不易。有鉴于此,PowerDesinger提供了三种常用的导出模板,用户也可以自己定义模板。通过模板可以迅速完成设计模型文档的导出工作。

  而Rose没有导出模板的概念,更不能对导出项和格式进行设置,你只能按Rose的系统内置的方式进行模型文档的发布。

  ? 代码导出

  在导出设计模型的代码时,PowerDesigner提供了精细的控制,不但可以进行对象级别,还可以进行代码级别的控制(如是否要生成字段备注的代码,外键代码在表体代码内声明还是在表体外部声明等),而Rose没有提供代码导出的控制,也只能按其系统内部设置的方式导出代码。

  clip_image007

  图 5 数据库模型导出设置(PD)

  ?

  生成测试数据

  PowerDesigner可为数据表生成批量的测试数据,而且你还可以制定测试数据的生成规则。这个功能给初期项目的开发测试带来很大的便利。Rose中没有提供类似的功能。

  1 {$ page title=易用性上的比较}

六、 易用性上的比较

  6.1、元素显示属性调整Rose调整元素的显示属性(如类图的显示样式,方法入参是否显示等内容)的设置时,新设置仅对新创建的元素起作用,如需调整已有元素的显示属性,只得在设计Diagram中,逐一通过右键的方式一个个调整,做法有点刀耕火种的味道。 PowerDesigner在这点上显得很人性化,在调整完元素显示设置后,PowerDesigner弹出一个窗口,提供三个应用新设置的选择:

  clip_image008

  图 6元素显示设置调整后应用范围(PD)

  其一,应用到所有元素;其二,应用到当前选择的元素,其三,应用到新创建的元素。此外,PowerDesigner对每一类元素(如类图,序列图,表图,引用等)的构成项(如表名,字段名,主键列,索引列等)均可以提供单独的显示属性设置,比Rose的控制要精细很多。

  6.2、Undo操作Rose的Undo操作只能回退一步,有时甚至连一步都不能回退,假设你不小心删除了一个精心设计的模型元素,如果不及时Undo,就只得重头再来了。Rose不给设计者后悔的机会,这种一厢情愿的呆瓜式设计有时真让人捶胸跺足,所以你在删除或调整元素时,往往得战战兢兢,如履薄冰。相比之下,PowerDesigner则显得宽宏大量,允许你Undo几十步,自动地进行工作场景的回溯,所以在PowerDesigner下工作,会比较轻松自如,因为你不用为误操作而付出代价。

  6.3、查询功能PowerDesigner的查询功能比较强大,可以按模型类型,元素类型限定查询范围;还可以使用复合条件进行精确搜索。

  clip_image009

  图 7高级搜索窗口(PD)

  在元素查询结果列表中,可以选择定位到导航树,Diagram或者属性设计窗口,非常方便;而Rose只能按名称进行搜索,且从搜索结果列表只能定位到元素所在的Diagram中。

  clip_image010

  图 8 搜索窗口(Rose)

  6.4、默认字体的问题PowerDesigner有一个比较让人讨厌的东西,就是字体大小的系统默认值是8号字,对于中文来说这个字号太小了,需要9号字才比较适合。所以在设计元素时,需要分别调整字体的大小,或者去改变每种元素的默认字体设置,相对来说比较麻烦。而Rose在这点中做得不错,系统默认的中文字体大小的默认值刚好适合。

  6.5、元素布局调整PowerDesigner对Diagram中元素的布局提供了更多的支持,如元素对齐排列,元素的上下图层关系等,并提供了相应的快捷键,操作起来很顺手。而Rose仅支持自动布局(Auto Layout)功能,毫无二致地将选择的元素水平中心对齐,也没有图层前后移动的功能。

  6.6、用鼠标进行元素选取的策略在Diagram中选择模型元素时,PowerDesigner采取“完全包含选取策略”,而Rose采取“部分包含选取策略”。在“完全包含选取策略”下,Diagram中的元素需要完全被鼠标选择的矩形区域包含后,才被选中;而在“部分包含选取策略”下,只要元素的部分区域被鼠标选择的矩形区域包含,就被选中。依个人的使用经验,觉得“完全包含选取策略”是更适合些,Microsoft的产品也采用这种策略。因为在“部分包含选取策略”下,只要一擦边,元素就被选择了,其结果往往是选择了很多不希望选取的东西,如连线,周边元素图形等。

  6.7、代码预览功能 PowerDesigner可以在属性窗口中预览模型元素(如类、接口、表、视图等)对应的代码。在类图的属性窗口中,甚至还可以直接编辑预览的代码来进行模型元素的设计,就象Together一样。在设计诸如类,接口的模型元素的方法时,对于有着丰富编程经验的设计师来说,有时与其通过一个又一个弹出对话框,还不如直接通过编写代码来得方便,PowerDesigner的这种设计充分地考虑到了分析设计人员同时也是开发人员出身的特点,由此带来很大的便利,提高了效率。

  clip_image011

  图 9类设计属性窗口(PD)

  而在Rose中,模型元素没有代码预览功能,更不能通过代码进行反向设计,只有通过导出代码的功能才能看到模型元素的代码。

  6.8、同类型元素统一管理窗口PowerDesigner为每一类型元素(如字段,表,对象,索引,主键等)提供了集中管理窗口,可以在该列表中对同类元素进行统一管理。如在设计数据库模型时,希望将所有的索引存储到一个指定的表空间中,你可以打开索引的集中管理窗口:

  clip_image012

  图 10 索引属性列表框(PD)

  在此管理窗口中调整所有索引的Options设置就可以了。如果没有这样的集中管理窗口,就需要在每个表的属性窗口中分别独自地设置表索引的Options属性,操作繁琐暂且不提,如何去保证每个索引都得到正确的设置就够让人伤脑筋了。而在Rose下,你就得逐门逐户查户口式的一个个去设置,没有捷径可走。PowerDesigner的这种分散设计,集中管理的设计思路体现对立统一的哲学思想的完好运用,因为事物有其独特性,也有其统一性,需要兼顾两者而不可偏废。

  6.9、批量编辑操作

  PowerDesigner的批量编辑操作能够大大提高的工作效率,这些批量编辑操作包括同时选中多个元素项目,同时编辑选中项的相同属性值,调整顺序等。

  1

  {$ page title=资源占用和运行稳定性}

  clip_image014

  图 11批量编辑操作(PD)

  Rose不支持批量编辑和批量顺序调整等操作,需要逐一编辑:

  clip_image015

  图 12 不支持批量编辑(Rose)

  ? 元素快捷图示

  PowerDesigner可以创建模型元素的快捷图示,它相当于是元素视图层上的多份拷贝,使同一个物理元素对应多个逻辑的图示。这对于大型复杂系统的分析设计特别有好处,因为一个模型元素会在多个地方被引用,这时你就可以通过Ctrl+C和Ctrl+K的方式来创建模型元素的快捷图示,在多个地方使用它,甚至在同一个Diagram中使一个元素在不同的地方出现多次,防止大距离的关系连线导致蜘蛛网式的设计图。

  Rose也可以创建快捷图示,即通过Ctrl+C和Ctrl+V创建,但却不能复制一个现有的元素,Ctrl+C和Ctrl+V在PowerDesigner中是创建一个复制的元素。此外,在同一个Diagram中,同一元素的不同快捷图示,Rose是表现为相同的名字,而PowerDesigner则会添加数字后缀,以示区分。

  ?

  属性窗口大小调整

  Rose的编辑属性窗口没有放大,缩小按钮,需要手工拖动鼠标调整大小,一直不明白为什么如此简单的功能,Rose也要吝啬不提供。PowerDesinger的属性窗口则没有这个限制。

  clip_image016

  图 13属性窗口(Rose)

七、资源占用和运行稳定性

  ? 资源占用

  Rose在进行面向对象的设计时,由于要加载大量的类库,导致内存资源占用很大,往往达300M以上,PowerDesinger的资源的占用则小得多。

  clip_image017

  图 14 资源占用率

  ? 稳定性上

  Rose常有窗口“抽筋”的反应(窗口变白,不接受任何响应),甚至毫无征兆地异常退出,容错性也不太好。如在逆向工程时,如果代码存在错误,甚至仅仅对一个存在错误的类进行逆向工程,窗口也会出现“抽筋”现象。

  PowerDesigner显得灵活快捷,很少出现窗口“抽筋”和意外退出的现象。

这篇关于PowerDesigner与Rose详解对比(转自woaidongmao)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575051

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.