适用于大型系统的Enterprise Architect类图

时间:2016-11-08 20:11:40

标签: c++ architecture uml modeling enterprise-architect

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

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

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

1 个答案:

答案 0 :(得分:1)

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

enter image description here

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

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

现在编写脚本部分。我将使用元语言,但您可能会猜测如何以您的首选语言使用它。第一件事是找到概览图。您可以通过在浏览器中右键单击它并使用Copy/Copy Node GUID...来查询其图表guid。现在有了这个id你可以找到它(例如下面的guid):

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

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

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会将帧扩展到指定大小以上的最小值。

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