多年来,我研究了很多使用代码生成器和 MDD 的方法。我一直觉得缺少一些东西:在运行时对模型进行修补和更改。
修补:如果你有一个代码生成器,你所有的类应该看起来一样。现在你有一个例外。到目前为止,所有代码生成器都需要我修改模板或模板引擎才能使其工作。
如果我可以对代码生成步骤的结果应用补丁来修复异常,那不是更好吗?
好吧,这取决于您如何构建模型。事实上,这取决于您使用的代码生成器、它的方法以及它可以让您做什么。
为规则(模型)创建例外或多或少违背了 MDD 的本质,除非应用的建模方法允许您将例外添加为建模实体。
我认为 ABSE 是唯一接受“自定义代码”作为一流实体的建模方法,就像文本或整数一样。如果您创建一个包含“CustomCode”参数的模板,您可以稍后仅在必要时添加您的异常代码,而不会破坏您的模型规则。这可用于添加或替换代码。您只需要在模板中指定它。
AtomWeaver是 ABSE 建模方法的免费实现。
MDD 不起作用,因为它基于域的视图而不是整个域。我的意思是,通常 MDD 在来自 UML 图的条目中采用 XMI。问题是该图只是域的视图,因此您有很多选择,而现实世界特别是在部署阶段要复杂得多。
唯一在我的项目中为我提供真正价值的公司是 EclipseUML 的 Omondo。EclipseUML 不尝试执行 MDD,而是在图表级别创建 UML,并与代码实时同步。部署是使用在代码中的 java 注释中添加的构造型进行的。因此,我可以建模,如果我添加部署原型,那么我的应用程序可以立即部署/如果我手动更改我的代码,那么我的模型将被重构并更新我的所有视图。如果我想添加文档,那么我只需在元模型中添加注释。当我单击每个元素时,这些注释是实时可用的。无需更多打印文档,因为实时导航、动态视图创建等...
我的 EclipseUML 模型始终是最新的,我可以立即部署它,因为 Java 注释在模型、元模型、图表和代码之间是同步的。真的很酷:-) :-)