使用PowerDesigner导入VISIO文档——挑战与技术内幕

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用PowerDesigner导入VISIO文档——挑战与技术内幕
Sybase公司PowerDesigner上海研发中心韩赟
1.简介
Sybase PowerDesigner是一个“一站式”的企业级建模及设计解决方案,它能帮助企业快速高效地进行企业应用系统构建及再工程。

在最新版本15中,它加入了对企业架构模型(EAM)的支持,此模型主要面向企业高层人员,旨在帮助他们分析与管理企业运营过程中面临的各种挑战。

企业构架模型与原先业务模型(BPM)互为补充,使得PowerDesigner具备了卓越的企业架构分析能力。

在PowerDesigner 15发布之前,大多数企业构架分析人员偏好使用VISIO 作为他们的绘图工具。

与VISIO相比,PowerDesigner不仅仅是绘图工具,而是一个全面的企业构架分析与管理工具。

首先,PowerDesigner支持影响分析(Impact Analysis),它避免了对企业构架模型的修改引发的蝴蝶效应,所有的影响将会以树图或平面图的形式展现给用户。

其次,利用PowerDesigner的元数据管理数据库,用户可以对企业构架模型文件进行版本管理与维护(包括对任意2个版本的模型进行比较,轻松获取差别数据)。

最后,利用PowerDesigner的模型互转功能,用户可以直接从高层的服务模型生成底层的类图(Class Diagram),数据库脚本,甚至代码文件。

为了帮助用户从VISIO转移到PowerDesigner,版本15中附带了一个VISIO Import插件。

目前,这个插件支持VISIO 2003与2007中大部分的业务,网络相关的绘图(Drawing)。

他们将被转换为PowerDesigner中的BPM或者EAM。

2.安装与使用
图1. VISIO导入插件的安装
如图1所示,VISIO导入插件的安装非常简单,只要在安装PowerDesigner 时,勾选Microsoft Visio Addin。

在运行PowerDesigner时,如果系统中安装有VISIO 2003或2007,插件将被激活。

当插件被激活后,打开任意VISIO文档后将看到一个新的菜单选项:PowerDesigner(如图2所示)。

图2. VISIO导入插件菜单
点击菜单后,将弹出对话框(如图3所示),插件将自动匹配最适合的PowerDesigner目标模型(model)和图(diagram)。

用户也可自己选择目标模型,键入模型名字后,点击OK,导入就开始了,PowerDesigner将被自动打开,转换结束后的结果如图4所示。

图3. 选择目标模型
图4. 图2所示模型的导入结果
双击任意Process可以发现,转换后的Process被正确设置到所在的Swimlane(如图5所示)。

而这种关系在VISIO中是不可见的。

另外,当用户对这个Process进行影响分析(Impact Analysis)时,此关系将被正确地追踪,这
也体现了PowerDesigner 强大的元数据管理能力。

图5. 转换后的Process 被正确设置到所在的Swimlane
3. 模型转换基础
模型转换并不是一种崭新的技术,Wiki 百科将模型转换定义为:给定2个元模型(metamodel)A 和B ,将由元模型A 定义的模型a 转换为由元模型B 定义的模型b 的过程。

以VISIO 导入插件为例,模型a 相当于VISIO 文档(document),A 则为定义这个文档中图形(shape)的模板文件(stencil);而b 为PowerDesigner 的模型,B 则为PowerDesigner 的某个库(如EAM,BPM )。

整个关系如图6所示,而映射定义文件(mapping profile)则是整个转换的核心,它定义了具体的对应关系。

就这个插件而言,它定义了如何将VISIO 的Shape 转换为PowerDesigner 的Object
,它既可以是一对一的关系,也可以是一对多或者多对一关系。

[Conforms to][Conforms to]
[Transform to]Visio Document Visio Masters (in
stencils)
PowerDesigner Library (BPM or EAM)PowerDesigner Model Mapping Profile
图6. VISIO Import 中的模型转换架构
一般,映射定义文件总是定义在元模型层,它可以以任意形式存在(普通文本,xml ,代码等)。

转换引擎将根据此映射定义文件进行转换。

此外,值得一提的是,图6中给出的结构是可扩展的,元模型可以继续具有自己的元模型(meta-metamodel)。

4. 挑战
如前所述,只要转换引擎足够强大,那么转换的问题已经被完美解决了。

但是前面的讨论含有一个假设,即模型总是被它的元模型完全定义。

不幸的是,现实模型世界往往不能满足这一假设:首先元模型并不是非常明确的存在;其次,模型本身有时是自定义的(即模型的元模型是其本身)。

第一个问题主要源于各公司的产品一般不会完全暴露其内部的元模型。

第二个问题意味着只有当模型被读取时才能获得其元模型,这使得映射定义文件无法在设计时(design time)定义,而是必须在读取模型时(runtime)动态定义。

下面将对VISIO插件面临的挑战一一进行讨论。

4.1所有物体都是Shape
在VISIO的一个页面(page)中,所有的图形都被称为Shape。

VISIO并不区分链接(link),它只是一种特殊的Shape而已,而且大多数时候,链接是自定义的(self-defined)。

4.2VISIO中的自定义Shape
对于自定义的Shape,图6所示的映射框架将无法正常工作。

因为自定义Shape的元模型只有在转换运行时(读取模型a时)才能被获取。

由于VISIO非常自由,即使原本有元模型的Shape,也可以定义一些自定义信息:例如,Shape 都可以定义自定义属性(custom property),如何映射这些自定义信息成为一个挑战。

4.3链接link
VISIO中,链接工具栏被广泛使用,它可以链接任意2个Shape,而对于PowerDesigner,link是有类型的,某种类型的link只能链接特定的物体。

如何选择正确的PowerDesigner链接是对模型转换的一个挑战。

4.4Shape作为背景
很多时候,用户会使用一些矩形或者椭圆形Shape作为其他Shape的背景图片(如图7所示)。

当进行转换时,如果不将Shape的序数(index)考虑进去的话,背景图片可能会遮挡住前面的Shape。

这显然不是用户所希望的行为。

图7. 白色矩形作为背景
5.解决方案
针对第4节中所提到的挑战,本节将分析VISIO插件第一版中的解决方案,并且对解决方案进行评估,提出展望。

5.1具有元模型定义的Shape
对于这类Shape,将根据图6框架进行映射。

但是对于4.2中提到的具有自定义属性的Shape,其自定义属性被忽略。

在下个版本中,这一问题将被改善,所有自定义属性将被保留并映射为PowerDesigner中的扩展属性(Extended Property)。

5.2自定义Shape
VISIO插件定义了4个虚拟的元模型:GenericLink, Polyline, Rectangle 和UnknownShape。

所有自定义的Shape将被归类为这4种中的一个。

有了这种机制后,映射定义文件(mapping profile)成为可能,分类算法如表I所示。

其中GenericLink和Polyline是专为被用作link的Shape设计的。

GenericLink将被转换为PowerDesigner中的某种link。

而Polyline则将根据坐标被直接绘制出来,第一版只支持线段的绘制,下个版本将加入对任意曲线绘制的支持。

而Rectangle是4.4的解决方案,因为大多数时候背景Shape不会被连接。

VISIO插件的作者认为,按照序号(index)转换对性能将产生很大的影响,所以作为一种对性能的取舍,放弃了按照序号转换的方式。

同样的,对于虚拟元模型,由于无法预知Shape所包含的自定义属性,这部分信息与5.1中所述相同,被忽略了。

下个版本中将通过类似反射的方式,支持这些属性向PowerDesigner扩展属性的映射。

5.3可扩展性
由于采用了图6所示的转换模式,VISIO插件是可扩展的。

只要更新映射定义文件,可以将任意VISIO文件转换为PowerDesigner模型。

当然,对于PowerDesigner不支持的文件类型(如电路图等),转换是没有意义的。

由此也可发现,VISIO和PowerDesigner的侧重点各不相同。

在下个版本中,将引入一些扩展机制,使得用户也可以参与到映射文件的定义中来,按照用户的需求进行转换。

6.总结
在本文中,首先介绍了PowerDesigner 15中的新增功能VISIO Import的安装与使用。

在此基础上,介绍了模型转换的基础知识。

接着,本文讨论了VISIO 插件在开发过程中遇到的挑战。

最后,本文给出了第一版中的部分解决方案并对这些方案进行了评估,提出了下一版本中的展望。

相关文档
最新文档