我正在使用Sparx Enterprise Architect 13进行软件系统建模。此系统包含不同版本的软件组件。当我们发布软件组件的新版本时,我们通常会添加服务和/或API。
当前,为了反映组件ServiceV1公开接口A而ServiceV2公开接口A(与ServiceV1相同)和B的事实,我使ServiceV2扩展了ServiceV1。但这并不简单:
是否有更好的方法? 维护同一组件的多个版本的标准方法是什么?
谢谢!
答案 0 :(得分:1)
我不认为这是某些标准组织所标准化的,但是我建议引入两个抽象级别:未版本化的组件级和版本化的组件级。
每个版本化的组件,例如MyComponentV2对未版本控制的版本具有“跟踪”依赖性,例如MyComponent。
为防止不必要的设计工作,您可以决定仅在版本化的组件元素之间,而不在未版本化的组件元素之间或仅反之亦然之间绘制不同组件之间的关系。但这取决于组织的需求。
在创建组件的新版本时,请将组件的所有最新版本(包括Componenttrace≫-dependency)复制到未版本化的组件(MyComponent),并将其所有连接复制到该组件的正确版本中(MyComponentV3)。
我已经在一个大型项目中应用了它。
答案 1 :(得分:0)
实际上,没有为这种情况建模的标准。充其量您可以有约定-各个域可能有所不同。但是,这是我的建模方式:
ServiceV2
与<<trace>>
有ServiceV1
关系。 UML 2.5.1在p中说。 682:
«痕迹»|抽象|指定在不同模型中代表相同概念的模型元素或模型元素集之间的跟踪关系。跟踪主要用于跟踪需求和跨模型的更改。由于模型变化可以在两个方向上发生,因此依赖关系的方向性通常可以忽略。映射指定了两者之间的关系,但很少计算,通常是非正式的。
所以这意味着在这种情况下,ServiceV2是使用ServiceV1创建的(我以前使用<<derive>>
是因为它看起来很逻辑。但是实际上UML语义的定义不同;请参见UML 2.5.1的第680页)。您可以在这里发明自己的构造型,并在域上下文中进行解释(例如<<version of>>
)。
您可能会创建ServiceV1的副本或将其手动建模为新元素(不是在大规模场景中那样做,对吗?)。在这里,我添加了提供的接口,它们都实现了公共接口A
。快速链接器不提供那些关系。您需要采用笨拙的Ctrl-I方式,或者从工具箱中获取实现。
不直接提供<<derive>>
依赖项(除非您拥有自己的MDG并在QL或工具箱中定义了它)。因此,您将创建一个依赖项,然后从原型菜单中选择derive
。
这是一个广阔的领域,版本控制不只是添加编号模式那么简单。无论如何,如果您创建一个新组件,那将有所不同。因此,<<derive>>
可能是这里的最佳选择。
N.B.:EA使用小写字母<<trace>>
,而UML使用<<Trace>>
。只是注意到了。此后,EA一直使用小写字母。自OMG上的UML 2.5起,一些遗物将其更改为大写的第一个字符。值得提交错误报告吗?