EMF开发笔记

·通过使用emf将xml,java,uml不同的数据模型表现形式关联起来。可以将emf当成一种“胶水”将三者结合起来
·使用emf的几个原因:第一个就是代码生成(uml也可以用来生成代码吧,不可能是说服我使用emf的理由);第二个就是可以作为一种meta data,这个应该属于建模的范畴,uml也应该有这个作用,不能成为说服我使用emf的理由;第三就是支持序序列化和反序列化,可以根据模型定义创建的实体生成xmi文件,以及从xmi文件得到模型实体定义,这个是我所需要的,所以我要学习emf,对于配置文件编辑了一通就是要导出为xml文件来保存嘛,当然现在有很多的工具包可以实现这个功能,从javabean导出xml文件,或者从xml到javabean;第四个就是作为xml,uml和java接口之间的桥梁,还有一个就是能生成用来编辑model的编辑器
·emf和uml之间的区别:实际上emf是uml的一个简单的子集,uml比emf包含的内容更多,比如,uml除了可以描述一个东西的结构之外还可以描述它的行为。
·EMF是MDA的一部分
·EMF Core Model不仅可以通过UML,XML Schema,RDB Schema以及annotated Java Interface来产生,而且可以是任何格式
·ECore Model是所有metamodel的meta
·Model Object继承EObject接口, EObject又继承Notifier接口
·对于没有加@generated的方法,在重新生成的时候,该方法将被保留。如果自定义方法跟EMF定义的方法冲突,那么自定义方法具有优先权。如果希望EMF能对方法进行重新生成,那么给该方法名加Gen后缀即可
·Generator Model是Core Model的一个装饰器,它封装了一些在生成相关model的信息,这些信息存储在.genmodel文件中
·将generator model和core model分开的原因是,这样做可以使metamodel信息更独立,更简单,不用对生成逻辑造成依赖,其缺点就是如果对core model进行了修改,那么会造成generator model没法跟core model同步,为了避免这个缺点,generator model class提供了一些方法用来在core model发生改变的时候能对generator model进行同步更新
·在emf中的Notification Observer称之为adapter,因为它不仅是对状态的侦测,同时也是被观察对象行为的一种扩展。
·要使用adapter对某个对象的行为进行扩展,需要使用adapter factory, adapter factory通常需要一个给定的扩展类型(extension type)来进行适配,这里的扩展类型指的是adpater所实现的某个接口,因此可以对adapter factory声称的adapter进行造型,如果需要adapt的对象已经存在该类型的adapater那么返回改adapter,否则会新建一个。
·被适配的eobject并不关心是否被适配,这个是adapter factory的职责
·EContentAdapter用于attach的EObject中包含的reference, resource发生变化时调用相关的通知方法
·ResourceSet是Resource Factory,如果在加载一个resource的时候,遇到里面的对象引用了位于其他持久存储文本中的对象(cross-document reference),resouceSet将通过代理对象去load引用的文档来完成加载过程,这个也称之为按需加载或者延迟加载
·对于集合类型的属性来说,设置changeable为false是无效的
·对于像那种属性值是通过其他属性计算得来的,可以将volatile设置为true,volatile类型的属性同时也是non-changeable类型的属性
·为了区别某个属性是否需要区别没有设置和禁止设置,需要使用使用unsetable来标记这个属性
·对于引用来说,如果containment标记为true,那么包含的子对象将和父对象位于同一资源文档中,containment referenece又称为by value aggregation association,这里的containment设置为true不仅包括容器对象而且还包括被包含的对象
·只有当reference 对象和父对象处于不同的resource document的时候,才会使用到proxy object。
·一个对象只可有一个container,如果它被添加到一个container中,那么它必须从另外一个container中移除
·当将resolveProxies 设置为false表示source和target位于同一resource中,不需要使用proxy对象,这样可以提高性能。
·如果设置为voltile,那么需要自己实现相应的get代码
·通过设置changeable为false可以避免生成set方法
·IEditingDomainItemProvider 用来提供command,比如添加、删除、修改
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值