uml - Sparx EA 逆向工程和推断关系?

标签 uml enterprise-architect

我正在使用 Sparx EA(当前版本)对类图(C#,如果重要的话)进行逆向工程一个简单的小测试解决方案。只有两个类。测试 1 和测试 2。 Test1 有一个属性;

public List<Test2> test2list { get; set; }

基于该属性,我希望 EA 能够推断出这两个类是相关的并相应地更新图表,但事实并非如此。我只得到两个类,并且必须手动链接它们。

有什么方法可以让 EA 认识到这些关系吗?

最佳答案

首先,我认为问题评论中的讨论突出了根本问题:对于 UML 中的哪些关系对应于实现语言 X 中的哪些构造,尚未达成共识。

换句话说,最常见的实现语言没有标准化的 UML 概要文件。 (Java 有一个非常古老的版本,但它已经过时了。)我认为这是 UML 的一大缺陷,而不是任何特定工具的问题。

回答这个问题:不,EA 在这种情况下不会推断依赖关系或用法。但这里的问题更深层次:EA 无法正确解析模板类型。

扩展您的示例,考虑以下四种情况:

public List<Test2> test2ListProp { get; set; }
public List<Test2> test2ListAttr;
public Test2 test2SingleProp { get; set; }
public Test2 test2SingleAttr;

EA 识别属性,将其表示为操作,而不是属性。它不会为这些创建任何连接器。另一方面,非属性在模型中通过属性和定向关联来表示。以这种方式使用的属性和有向关联在 UML 中在语义上是等效的,但对于操作则不然。

如果您现在进入模型并重命名 Test2,您将看到 EA 正确更新了属性和属性中非列表类型的名称,但其他类型保留其 List<Test2>类型。这就是它的突破点; List<Test2> type 只是一个字符串,而不是正确的模型引用。

您还应该注意定向关联 test2ListAttr重数为 0..*。这是因为 EA 正确地推断出该属性实际上是一个列表。可以在“工具”-“选项”-“C#”-“附加集合类”中控制此推理。

如果您现在去删除List<#TYPE#>;从该选项,然后创建一个模板类 List在您的模型中并重做导入(在这种情况下首先清除模型可能是个好主意),EA 将更改其 test2ListAttr 的表示形式。而不是创建到 Test2 的 0..* 定向关联,它将创建一个绑定(bind)到您的 List 的模板类,指定 Test2作为实际参数。

这是一个正确的模型引用,如果您更改 Test2 的名称绑定(bind)将被更新(您可能需要重新加载图表)——换句话说,这是正确的表示,如果您要从此模型生成代码,它将是正确的。事实上,通过以这种方式设置选项并预先创建 List 类,上述四种情况中的三种行为是正确的。

但是,这并不能解决类型为模板类的属性的问题。因为 EA 将它们表示为操作,所以它无法为它们绘制定向关联,因此,它也不会为它们绘制模板绑定(bind)。如果我是你,我应该将此报告为错误。

相关说明,您可以让 EA 为操作返回和参数类型创建依赖项(但不能为模板类型使用创建依赖项)。这是在“工具”-“选项”-“源代码工程”中设置的。

关于uml - Sparx EA 逆向工程和推断关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10140287/

相关文章:

uml - 如何建模两个不同类的两个交互状态机?

dependency-injection - 如何在 UML 中建模依赖注入(inject)?

uml - Sparx Enterprise Architect转换(从源到UML)

mysql - EA——生成DDL脚本

enterprise-architect - 企业架构师更改序列图消息文本大小

uml - 零件和端口的含义?

java - Eclipse Indigo (3.7) 的免费 UML 插件?

enterprise-architect - 导出 Enterprise Architect 图表的自动化方法?

java - 是否可以使用 Java 创建 Enterprise Archetict 扩展?

java - 我可以只使用一种概念还是需要使用java中的继承?