c++ - 大型系统的 Enterprise Architect 类图

标签 c++ architecture uml modeling enterprise-architect

我正在为我的公司处理一个非常大的 UML 文档项目。我们正在尝试在 Enterprise Architect 中对现有程序进行建模,以更好地记录它。由于应用程序的大小,我们选择将图表分解为主包中的单独包(例如 GUI、GPS、可移动媒体等)。这对于每个部分的单独类图非常有用。但是,我想将类图从每个包拖放到主图中,以显示它们如何作为一个系统连接。

是否可以编写一个脚本函数来获取链接图并自动将它们全部链接起来,类似于代码工程导入的方式?我注意到在代码导入的最后一步,它添加了关联和概括。我想如果 Sparx 可以在导入代码时做到这一点,我应该可以在我的主文档中链接它们。关于如何实现这一目标的任何想法?

如果不可能,有没有办法将代码工程中创建的图表链接到我的包中已经存在的图表?我认为能够右键单击类图并从主文档中“在包中查找”以查看更多详细信息会很有用。

最佳答案

您基本上要做的是创建一个概览图,然后只需从浏览器中拖放相关图表即可。这提供了一个选择框

enter image description here

您刚刚离开第一个选择的地方 Diagram Frame。 EA 将使用图表名称建议的名称创建一个新对象(您可以保留该名称,但也可以根据需要进行更改)。现在,拖动的图表将出现在概览图上的命名框架内。您无法缩放此图表,因此它将具有原始图表的大小加上它周围的框架。

注意:您可以在上面的对话框中使用 Hyperlink 在图表之间创建漂亮的短链接以进行导航。

现在是脚本部分。我将使用一种元语言,但您可能会猜到如何以您的首选语言使用它。首先是定位总览图。您可以通过在浏览器中右键单击它并使用 Copy/Copy Node GUID... 来查询它的图表 guid。现在使用该 ID,您可以通过(下面的示例 guid)找到它:

overview = rep.GetDiagramByGUID("{A006B95E-1237-4778-A339-D1B407C6FD5C}")

下一步是找到要在概览中显示的单个图表。这取决于您如何找到它们。最终它们将位于存储库中的某些位置。要在第一个根的第一个 View 中静态加载第一个包中的第一个图表,您将调用

model = repository.Models.GetAt(0)
view = model.Packages.GetAt(0)
package1 = view.Packages.GetAt(0)
dia1 = package1.Diagrams.GetAt(0)

您可能会使用更智能的方法来迭代和查找相关图表。

现在有了这些图表对象,您就可以创建图表框架了。这需要放在包中的某个地方。为简单起见,我使用 package1,但您最终会将它们放在概览图的包中。

frame = package1.Elements.AddNew(dia1.Name, "UMLDiagram")
frame.Update()
sql = "UPDATE t_object SET PDATA1=" + str(dia1.DiagramID) + " WHERE Object_ID=" + str(overview.diagramID
repository.Execute(sql)

这是巫术,我知道。 API 不提供将 UMLDiagram 元素与引用图表链接的方法。所以这必须直接插入数据库。

最后,新创建的框架对象就可以放在概览图中了:

diagramObj = overview.DiagramObjects.AddNew("l=10;r=110;t=-20;b=-80","")
diagramObj.ElementID = frame.ElementID
diagramobj.Update()

自此 EA 开始,y 轴的坐标从顶部朝向负方向(l、r、t、b 代表,猜测)。 EA 会将框架扩展到指定大小以上的最小值。

为了查看结果,您需要关闭/打开概览图。我会把它留给你作为练习:-)

关于c++ - 大型系统的 Enterprise Architect 类图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495564/

相关文章:

c++ - openGL旋转重置

c++ - 为什么 `/usr/include` 不在 gcc 默认搜索路径中

java - Spring中的模块集成和安全

javascript - 构建模仿文件系统的依赖树的模式是否有一个名称?

uml - 类图 : Does Every Use Case Need to Be Drawn With Repeating Classes?

c++ - 如何最好地消除有关未使用变量的警告?

c++ - 使用 libxmlsec 从内存中加载 RSA 私钥

c# - 桌面应用程序 : Architectural Frameworks?

associations - 我的讲师对协会类(class)的看法是正确的还是错误的?

android - 多个场景的 Activity 图有多少? (UML 2.0)