Enterprise Architect 代码生成:获取接口标签

Posted

技术标签:

【中文标题】Enterprise Architect 代码生成:获取接口标签【英文标题】:Enterprise Architect Code Generation: Get tags of interface 【发布时间】:2021-12-12 16:53:54 【问题描述】:

我使用 Enterprise Architect 进行代码生成,我想自动检索一个类实现的接口的所有标签(在我的例子中是 Java 注释)。考虑以下示例:

从这个模型中,我想生成一个如下所示的类:

@AnnotationOfMyInterface
public class MyClass 
    ...

所以我想将注释作为标签添加到MyInterface,在代码生成期间应该应用到MyClass。在 UI 中,显示了已实现接口的标签,所以我希望有一种方法可以在代码生成期间获取这些标签。

我尝试编辑代码生成模板并找到宏来获取

    类实现的所有接口:%list="ClassInterface" @separator=", "% 具有给定名称的所有标签(正在为其生成代码的类):%classTag:"annotations"%

但不幸的是,我无法组合这些宏,也就是说,我无法将一个接口传递给classTag 宏,以便我可以检索该特定接口的标签(而不是我正在为其生成代码的那个)。有没有办法获取特定类/接口的类标签? 我还尝试创建一个单独的代码生成模板并从主类代码生成模板中“调用”它。但在我的模板中,classTag 宏仍然只能获取类的标签。

【问题讨论】:

我不确定这里是否有人在使用 EA 的代码生成。我没有,Geert 可能也没有。所以也许你应该在 Sparx 的论坛上问这个问题(带有这个问题的链接)。 几年前我不得不修改现有模板,但如果可能的话,我会尽量远离他们。有一些 Sparx 员工似乎非常了解这个话题,但他们通常只经常访问 Sparx 用户论坛。 @qwerty_so, Geert Bellekens:谢谢你们,我会在 EA 的论坛上碰碰运气。这仅用于概念证明。所以一旦我知道这在一般情况下是可能的,我会“尽可能远离”^^。到目前为止,摆弄模板并不是我所说的有趣或有益的。 是的,同样的故事。一般来说,我发现代码生成不像我以前想的那样有用。我使用 API 来创建运行良好的代码。但现在我知道代码应该保留在代码中,并在 UML 中进行设计。唯一有用的桥梁(对我来说)是当您重新编写一些现有代码时。无论如何祝你好运! 【参考方案1】:

感谢上面的 cmets,尤其是因为我在 EA 论坛上的问题得到了回答,我能够设置一些概念证明来实现我想要的。我正在回答我的问题以记录我的解决方案,以防将来有人遇到类似问题。

根据 Eve 在 EA 论坛中的提示,我考虑为 Enterprise Architect 创建一个插件,以便从代码生成模板中使用此插件。我首先编写了一个基本的插件,正如@Geert Bellekens 在this tutorial 中所解释的那样。之后我更改了插件以满足我的需要。这就是我最终获得类实现的接口的标记值(注释)的方式:

第一步: 在代码生成模板中,我获取了一个类实现的所有接口并将它们传递给我的 AddIn:

$interfaces=%list="ClassInterface" @separator=", "%
%EXEC_ADD_IN("MyAddin","getInterfaceTags", $interfaces)%

第二步: 正如here 记录的那样,存储库对象与 EXEC_ADD_IN 调用一起传递。我使用存储库对象并使用 $interfaces 中包含的名称查询所有接口。然后我可以获取每个界面元素的标记值。为单个接口实现此目的的简单原型:

public Object getInterfaceTags(EA.Repository repo, Object args)

  String[] interfaceNames = args as String[];
  String firstInterfaceName = interfaceNames[0];
  EA.Element interfaceElement = repo.GetElementsByQuery("Simple", firstInterfaceName).GetAt(0);
  String tag = interfaceElement.TaggedValues.GetAt(0);
  return interfaceElement.Name + " has tag value" + tag.Value;

我知道,有几个缺点,但这只是一个简单的概念证明,用于一个很可能永远不会成为生产代码的想法。

【讨论】:

以上是关于Enterprise Architect 代码生成:获取接口标签的主要内容,如果未能解决你的问题,请参考以下文章

用Enterprise Architect从源码自动生成类图

Enterprise Architect 安装出现如下错误,求解答

enterprise architect工具箱怎么打开

enterprise architect关闭文件后再打开看不见图标了怎么办

Enterprise Architect与startUML表示UML常用图

[行业软件类]Enterprise Architect(UML软件)