`

EMF开发指南之属性详解

阅读更多
★changeable:boolean值,指定属性值是否可设置
★transient:boolean值,指定属性值在序列化的时候是否可被忽略
★unique:boolean值,该属性在multipilicity-many(不知道怎么翻译)的情况下才有意义,它用来表示一个值在同类型对象实例中是否只存在一个相同的值   
★unsettable:当设置了该属性的时候,我们还需要使用另外一个属性值,即unset,该属性就是用来告诉emf,我们是否需要使用unset这个属性。
★volatile:boolean值,表明该属性值是否直接进行存储,这种情况一般发生在当前属性值是由其他属性计算而来的时候,此时该属性的set方法可能需要我们自己实现,而不是由emf generator生成的。
★还有几个与数量相关的属性:lowerbound,最小值,只能是0和正整数,upperbound,最小值,大于或等于最小值,如果是unbounded的话(极大值),可以设置为-1(相当于模型中的*)
★structrual feature的默认值:booelan类型的为false, integer的为0
★虽然采用不同的模型工具也可以生成emf model,但是总是会存在这样和那样的问题,比如有的虽然能建模总是和emf,gef,eclipse的版本相关,不同的版本会出现一些莫名其妙的问题最终让你死的很惨(我在这个上面花了太多的时间,推荐eclipse3.2.1+emf2.2.1,最新的会有问题),而使用annotated java interface则会消除这些问题,所谓强烈推荐采用annotation的方式生成emf model,不过它唯一比较麻烦的就是,你必须熟练掌握各种annoation的用法。
★一般情况下,我们不需要针对package来定义接口,除非我们需要对EPackage的一些属性进行复写(有几个final的属性eName,eNS_URI,eNS_Perffix),但是在下面两种情况下,我们也需要进行自定义:如果需要显示定义EDataType以及显示定义一个map entity。
★class的接口定义,就是一般的接口定义加上@model annotation,attribute和reference的定义通过在get()方法上指定相应的annotation,operation则使用其他的方法定义。
★class的model属性主要包括abstract和interface,用来指明定义的class是否是抽象类和接口,都是boolean值
★class中的attribute的设置,只有符合以下条件下才能被emf generator识别为一个attribute:必须带有一个@model的annotation,且跟随后面的属性不能带有parameters属性;方法名必须以get或者is开头,紧随其后的必须为大写字母开头的属性名;还有一点就是方法返回的类型不能和EClass相关(如果返回类型是List或EList,那么里面的类型必须通过@model之后的type属性加以指定,否则,EAttribute的eType要设置为对应的EDataType类型)
★class中的reference的设置,只有符合以下条件才能被emf generator识别为一个reference:必须带有@model的annotation,且跟随后面的属性中不能带有parameters属性;方法名必须以get开头,紧随其后的必须为大写字母开头的属性名;返回的类型必须和EClass相关
★class中的operation的设置,只有符合以下条件才能被emf generator识别为一个operation:必须带有@model的annotation;@model带有一个parameters属性,如果方法名的定义不符合attribute和reference的方法名定义可不用带parameters属性,但是如果参数类型必须使用指定的EDataType,则必须带paramters加以指定。
★枚举值的定义,在class的定义中,每一个int值的定义,如果使用了@model annotation,那么将被emf generator解析成一个枚举值,如果你不希望使用emf 生成的枚举名称(通常就是定义的那个属性名),可以通过@model后面的name属性加以指定
★自定义类型的定义,一般情况下,我们无须显式的自定义Data Type,emf会根据attribute和operation中用到的数据类型在EPackage中添加相关的自定义Data Type类型。有时候为了给一种类型提供指定的序列化处理方式,需要自己写Data Type,为了自定义一个Data Type,具体步骤如下:方法名已get打头;在方法注释中添加@model;getter方法返回类型为Data Type;注释的属性中包含instanceClass用来指定实际的java class 或者interface,还有一个属性是serializable。
★用户描述core model结构的元数据模型(metamodel)称之为Ecore,同时我们又用它来描述实际应用中的数据模型,因此Ecore又被称之为应用元数据模型的元数据模型(meta-metamodel)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics