快速业务通道

EMF介绍系列(三、定制应用程序的基本方法) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
nmodel生成代码的,所以像是否生成图标这些信息放在 genmodel里是比较合适的,而 ecore模型里定义的是各个类型以及之间的关系,所以像属性缺省值这样的信息是应该放在 ecore里没错的。

EMF介绍系列(三、定制应用程序的基本方法)(2)

时间:2011-04-30 博客园 bjzhanghao

二、直接修改生成的代码

前面的方式是让EMF生成我们想要的程序,好处是非常直观和方便,缺点是只有有限的信 息可被定制,而一个复杂的应用程序是不太可能仅仅通过填写一些属性就被生成出来的,所 以我们需要代码级的定制。有一个事实你需要知道:无论对ecore还是genmodel模型定制,产 生的结果最终都要反映到生成的代码。让我们对比一下修改名称缺省值前后的代码(因为类 图里NamedElement被定义为抽象类,所以这段代码的位置在 CategoryImpl.java和 ProductImpl.java里),这是之前生成的代码:

/** * The default value of the ''{@link #getName() <em>Name</em>}'' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getName() * @generated * @ordered */

protected static final String NAME_EDEFAULT = null;

下面是定制之后的代码:

/** * The default value of the ''{@link #getName() <em>Name</em>}'' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getName() * @generated * @ordered */

protected static final String NAME_EDEFAULT = "(Unnamed)";

可以看到只是NAME_EDEFAULT的值发生了变化。也就是说,如果我们不修改ecore模型,而 是手工修改这段代码也能达到同样的目的。对于熟悉 EMF的开发人员来讲,修改代码很多时 候甚至比修改ecore/genmodel模型更加快速(因为省去了reload genmodel和生成代码这两步 ),但一定要记住,在修改代码的同时修改这部分代码前的javadoc。因为在每次重新生成代 码的时候,JET通过原有代码前的javadoc判断是否覆盖这段代码,如果javadoc里包含一 行"@generated"则覆盖,否则保持这部分代码不变。为了让我们手工的修改不在以后的生成 中消失(这可是很大的损失),可以直接删除@generated这一行,更好的办法是将其改为一 个统一的字符串,例如 "@generated NOT",以便将来通过javadoc搜索找到自己都在哪些地 方做了手工修改。

下面再通过一个例子演示怎样修改EMF生成的代码。假设现在有个需求是让所有价格大于 等于100元的产品自动打95折,而小于5元的商品一律按5元算,那么我们需要修改 ProductImpl的getPrice()方法,修改前的代码如下:

/** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public double getPrice() {    return price; }

这是修改后的代码,再次提醒一定别忘记修改@generated那行注释:

/** * <!-- begin-user-doc --> * 所有价格大于等于100元的产品自动打95折,而小于5元的商品一律按5元算。 * <!-- end-user-doc --> * @generated NOT */ public double getPrice() {    if (price >= 100)      return price * 0.95;    if (price < 5)      return 5d;    return price; }

至于使用哪种方式进行定制,我个人建议能通过修改ecore/genmodel模型解决的问题就不 要直接修改代码,尽量减少手工修改的地方有利于保持思路清晰,其实在实际使用中大部分 定制还是需要修改代码才能实现的。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号