【发布时间】:2011-02-09 13:52:44
【问题描述】:
我开始使用 Moose/Perl 并正在寻找一个 UML 工具来创建图表并表示 Moose OO 系统。我已经与 Astah(前 Jude)合作过,但它是为 Java OO 系统设计的。有人可以推荐其他 UML 工具来使用 Moose/Perl 吗?
【问题讨论】:
我开始使用 Moose/Perl 并正在寻找一个 UML 工具来创建图表并表示 Moose OO 系统。我已经与 Astah(前 Jude)合作过,但它是为 Java OO 系统设计的。有人可以推荐其他 UML 工具来使用 Moose/Perl 吗?
【问题讨论】:
我的两分钱:
我为 Sybase PowerDesigner 编写了一个扩展名(一个 .xom 文件)。这个工具有一个强大的元类编辑器,您可以使用 vbscript 和专有语言 GTL 编写脚本。它还拥有大量可定制的元类和模板。
我的 PowerDesigner Extension 非常老套,并且包含一些我没有清理的陈旧代码。因此我没有发表任何东西。它对我有用,而且只对我有用。从我的脑海中吸取的一些经验教训:
我想做 UML 建模和代码生成,你也想做吗?
Moose 的属性非常重,因此在这方面值得采用 UML 方法。
没有过多使用角色,但我还是尝试将它们映射到接口。
我对如何建模关系不满意。 UML 概念和 moose/perl 概念的许多边缘情况和“阻抗不匹配”。 (顺便说一句,“关联类”的驼鹿等价物是什么?)
原生特征是 Moose 中的一个不错的功能,但我还没有成功创建用于编辑它们的 GUI
我还通过为类型强制设计一个可理解的 GUI 来伤害我的大脑(我经常需要检查 + 强制日期值)
静态属性是 UML 中的一个重要特性,但在 moose 中不太重要。问题是 perl/moose 中没有“静态”关键字,但你必须声明一个“使用 MooseX::ClassAttribute”或任何它被调用的东西,并且每个类只做一次,但在正确的地方(顺序很重要)
生成的代码不可能漂亮地打印出来,所以我通常会立即通过 perltidy 将其发送到“规范”形式,从而使差异和版本控制/提交到 SVN 更容易。
当一个类被生成时,Moose 类的紧凑性消失了,你将拥有 svn 属性、头文件 cmets、大量“use”+“use lib”语句、大量 POD、后面的一些注释行每个带有参数传递文档的子声明,强制页脚(“no moose ....”)-
不幸的是,逆向工程 Perl 代码(从代码更新 UML 模型)是不可能的。因此,在某些时候,我必须停止使用 UML 工具,并开始直接编辑 perl 代码,放弃模型。必须稍后手动重新检查这些更改,这非常耗时且需要小心。
优点:
生成正确的 POD 记录代码是您通过所有这些 UML 建模获得的主要生产力收益,恕我直言。适合“企业”编程环境。
您可以使用测试用例(或测试用例的存根)自动生成 *.t 文件。需要一些思考来设计智能测试,并避免 Dave Rolsky 在这篇博文中所写的问题:“add(ing) absolutely nothing that isn't already tested by Moose itself”
您可以在模型中定义自定义检查,例如“检查所有已声明属性的构建器方法是否存在,如果它们不存在,则创建一个存根,或者(问我要做什么)”
将噩梦般的数据库表轻松映射到 moose 类。 (我必须处理很多无法触及的多列表)。构建自己的图形 ORM-Mapper!
可能还有更多优势
【讨论】:
我还没有看到 Moose 的 UML 工具。建造一个并不难,只是有点劳动密集型。大多数情况下,它需要爬取给定类的元类树,并为每个步骤输出正确的 UML 标记。如果有兴趣构建这样的东西,你可以通过 irc.perl.org 上的#moose 停下来。我相信有人可以帮助您指出正确的方向。
【讨论】:
【讨论】: