我有一个 UML 项目(在 IBM 的 Rational System Architect/Modeler 中构建,因此以它们的 XML 格式存储)已经变得相当大。此外,它现在包含其他组想要重复使用的几个部分。我来自软件开发(尤其是 FOSS)背景,并试图了解如何在这里使用它作为类比。我正在努力解决的问题类似于易碎基类问题。
让我从它在面向对象(比如 Java 或 Ruby)FOSS 生态系统中的工作原理开始:
- 第 1 组发布了一些“核心”包,比如“
net/smtp
1.0 版” - 第 2 组
net/smtp
在其软件项目的供应商库中包含第 1 组的 1.0 包 - 在某些时候,第 1 组创建了一个新的 2.0 分支,
net/smtp
它破坏了向后兼容性(例如,它删除了一个旧的类或方法,或者将一个类从一个包移动到另一个包)。他们告诉 1.0 版本的用户,它将在一年内被弃用。 - 第 2 组,当他们有时间时,更新到
net/smtp
2.0。当他们放入新包时,他们的编译器(或 Ruby 的测试套件)会告诉他们不兼容的情况。他们确实必须进行一些手动更改,但所有更改都在代码中,以纯文本形式出现,这是他们非常熟悉的一种媒介。另外,一旦他们弄清楚修复是什么,他们通常可以使用他们的 IDE(或文本编辑器)的“全局搜索和替换”功能。
当我们尝试将此模型应用于 RSA 中的 UML 时,我们遇到了一些问题。RSA 支持一些相当强大的重构,但它们似乎只有在您对所有部分都具有写入权限时才有效。如果我在一个包中重命名一个类,RSA 可以重命名引用,但只能同时重命名。查看底层源(XML)并找出损坏的地方非常困难。在 RSA 编辑器中解决这样的问题本身意味着大量的点击——没有很好的“全局搜索和替换”等价物,至少在重构不完整之后是这样。
他们真正的症结似乎是 RSA 假设您想使用他们的 GUI 进行所有编辑,但这使得某些操作非常困难。
有没有人有克服这个问题的开源 UML 项目的例子?他们使用什么策略来传达变化?