一 二者的出身 作为世界最着名的两大CASE工具Rational Rose和PowerDesigner的名声可谓如雷贯耳Rose是当时全球最大的CASE工具提供商Rational的拳头产品UML建模语言就是由Rational公司的三位巨头BoochRumbaugh和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的一系列的区别相信大家可以借由这些比较而见微知着窥斑知豹以资在选择工具时提供参考三模型组织和层次结构上的区别 模型组织Rose将数据库模型和对象模型放在一起在进行数据表模型设计时没有特性化的东西而PowerDesigner将两者分开其模型组织层级关系是工作空间>模型类型>具体语言/数据库的模型>包>文件夹>Diagram>设计元素在创建模型文件时会让你选择模型类型选择模型类型后还可以选择模型类型下语言及版本相关的细分类不同设计模型对应软件工程的不同阶段如业务模型和需求模型属于项目需求阶段而对象模型属于概要和详细设计阶段数据库模型属于详细设计阶段它们之间虽然有很强的内在联系但差异性也很明显硬将两者放到一起就象把猴子和猩猩关进同一个笼子为了兼顾和平衡两者之间的考量其结果是两者都得不到很好的支持 图 新建模型窗口(PD) 图 新建模型窗口(Rose) PowerDesinger可以通过模型转换工具进行数据库建模和面向对象模型的相互转换但Rose不能将对象转换为表也不能将表转换为对象 工作空间PowerDesigner有工作空间的概念一个工作空间下可以同时打开多个设计模型文件而Rose同时仅能打开一个设计文件如果在设计时需要参考其他的Rose设计模型则需要反复关闭现有模型打开参考模型显得设计上比较欠考虑这个问题上两者的差异恰似Eclipse和JBuilder的区别 Eclipse可以同时打开多个工程而JBuilder只能同时打开一个工程 设计界面PowerDesigner的设计界面可以左右上下移动而Rose只能向右向下移动此外PowerDesigner可以将模型元素放大很多倍而Rose只能放大到正常倍数不过Rose的Overview工具可以使用户快速定位到设计区中特定的区域有点类似于游戏界面中常用的小地图挺不错 图 Overview工具(Rose) 而在PowerDesigner中你可以通过F快捷键查看Diagram的总览图不过只得通过放大操作定位到定位区域 对模型和语言的支持 ?对设计模型的支持力度和广度 PowerDesigner对对象模型和数据库建模两者的支持力度已经大抵相等此外还支持概念模型业务模型需求模型XML模型信息流模型自由模型的分析设计不过对后面这几个模型的支持比较初级而且在实际的应用中这些模型用得也比较少PowerDesigner的突出亮点还是在数据库建模和对象模型的设计上 对于数据库模型PowerDesigner支持余种数据库对于同一数据库的不同版本还提供单独的支持以便在设计数据库模型时提供数据库和版本相关的设计对于面向对象模型PowerDesigner支持种主流语言为对Java 提供单独的支持 Rose基本上可以说是一个对象模型设计工具对数据库模型的支持相对粗糙内嵌的只支持Oracle 数据库对其他数据库设计的支持需要通过安装插件的方式获得且对数据库物理存储参数等较细粒度的内容支持得比较粗糙Rose的对象模型主要支持JavaVC和VB三种语言 ?对Java语言的支持 Rose对Java语言的支持更好不但为不同版本的JDK提供了支持(不过Rose 还不支持JDK )还为Java具体产品及设计模式(如EJBCorbaServletGOF设计模式等)提供了内嵌性的支持这些支持直接反应在Rose的主菜单上正因为如此使Rose背上的沉重的历史负担如EJB和Corba这种语言级的东西是易变且不断更新的如何在这些具体产品的地位和影响已经降低时对其作出割捨而又保证版本的兼容性是摆在设计者面前的难题 PowerDesigner仅提供语言级对象设计的支持不涉及语言内部的具体产品其次因为它的设计工作区是和具体的模型类型及语言细分类相关的而非在主菜单中直接提供支持所以PowerDesigner在升级时显得更加从容一些 这也是为什么PowerDesigner能以每年一个版本的速度升级而Rose在版本后新版本还迟迟投入市场的内在原因否则以IBM的财力研发能力不至于对市场反应如果缓慢 输入和输出功能的比较 ?反向工程 从将程序代码转换为设计模型的逆向工程功能上看Rose更象一个IDE它会对需要逆向工程操作的程序代码进行深度语义检查如果存在诸如程序代码引用了类库之外的类反向工程将失败而且在报告失败之前窗口会陷入长时间无响应状态 PowerDesigner仅对需逆向工程的程序代码进行浅度语法检查这种浅度语法检查不涉及包类之间的关联仅对诸如类名是否和类文件名匹配是否少了} 等语法性的内容进行检查即便存在错误PowerDesigner也允许你忽略错误继续进行逆向工程操作这种宽松的限制带来了很大的便利 图 逆向工程失败选择三种选择(PD) 忽略错误后PowerDesigner会尽量修补错误例如代码中少了对应的}它将会补上类名和文件名不一致将忽略类文件名保持类名不变 Rose一直宣扬的理念是IDE和设计工程进行双向互通在Rose中完成模型设计后导出为IDE所用的代码IDE编码调整后又逆向工程到Rose理念很美深具吸引力但是在实现中 往往很少有开发团队会这样做一般CASE工具只是在分析设计阶段使用甚至很大比例的设计师仅把它当成画图的工具 真正进入编码开发阶段后将加入大量设计时不涉及的类和方法如果将这些非骨架性的东西Reverse到CASE工具中反而会使原来清晰的设计变得雾里花水中月所以即使编码时需要对原分析模型进行调整一般也是手工去调整设计模型而不是通过逆向工程去同步毕竟分析设计是骨架性的而编码是血肉性的两者有属性上的区别如果真的需要频繁进行的代码和UML转换最好使用类似于Together一样的工具它嵌入到IDE中使代码和模型转换方便快捷 ?文档导出功能 PowerDesigner对文档导出提供了精细的控制你不但可以对文档所包含的内容项进行设置还可以对内容项的格式进行设置如导出的表结构是否包括名称数据类型备注等项目这些项目在表栏中的宽度占比颜色字号等等不一而足 PowerDesinger 还新增了一个多模型文档整合导出的MiltiModel Report模型允许你以多个模型作为输入生成为统一文档实现模型设计按阶段分开文档又统一整合的目的 由于PowerDesigner文档导出的设置非常精细所以要设置好一个文档导出模式实非不易有鑒于此PowerDesinger提供了三种常用的导出模板用户也可以自己定义模板通过模板可以迅速完成设计模型文档的导出工作 而Rose没有导出模板的概念更不能对导出项和格式进行设置你只能按Rose的系统内置的方式进行模型文档的发布 ?代码导出 在导出设计模型的代码时PowerDesigner提供了精细的控制不但可以进行对象级别还可以进行代码级别的控制(如是否要生成字段备注的代码外键代码在表体代码内声明还是在表体外部声明等)而Rose没有提供代码导出的控制也只能按其系统内部设置的方式导出代码 图 数据库模型导出设置(PD) 生成测试数据 PowerDesigner可为数据表生成批量的测试数据而且你还可以制定测试数据的生成规则这个功能给初期项目的开发测试带来很大的便利Rose中没有提供类似的功能 |