我想测量EA包在模型中其他包中的依赖程度。
因此我循环t_connector
以识别我的包中的元素是源的记录,而目标是来自其他包的元素。
一切都适用于元素之间的关系,但包之间的关系是不同的:
我的包中的子包有时依赖于模型中的外部包。 很遗憾,t_connector不存储此数据!
那么,包关系存储在哪里?
答案 0 :(得分:2)
它们存储在层次结构中。 t_package.parent_id将子包链接到其父包。仅在显式创建连接器时才会创建连接器。如果是这样,连接器源/目标链接包的元素的id。
答案 1 :(得分:2)
所有连接器都存储在t_connector
表中。但是,t_connector.Start_Object_ID
和t_connector.End_Object_ID
中的引用引用了t_object.Object_ID
- 而不是t_package.Package_ID
。
在EA数据模型中,UML包具有双重表示:t_package
中的一行和t_object
中的一行,t_object.Object_Type = 'Package'
和t_object.PDATA1 = t_package.Package_ID
。 (请注意,t_object.PDATA
列是字符串。)
严格地说,只有元素在EA中有连接符。但API中的Package
类隐藏了这一点,并允许您使用Package.Connectors
集合循环遍历包元素的连接器,就好像它们属于包本身一样 - 但是如果你看Connector.ClientID
和Connector.SupplierID
,你会发现两个人都没有匹配你正在循环的连接器的Package.PackageID
。
如果连接器从当前包运行到某个其他包,那么为了检索连接器的另一端,您需要做的是查询存储库以查找元素 - 而不是package - 使用连接器的客户端ID,如
connectedPackageElement = Repository.GetElementByID(connector.ClientID)
好消息是包本身及其包元素都具有相同的名称。但是如果你需要从包中提取更多信息,你需要发出另一个电话,如
connectedPackage = Repository.GetPackageByID(connectedPackageElement.MiscData(0)
因为你说过你是"循环过来"连接器,我假设您正在使用API而不是发出SQL查询。但结构是一样的; t_object
对应Element
班级,t_package
对应Package
班级,t_connector
对应Connector
班级。