使用EMF持久化和WTP持久化EMF对象两种方案的模型区别

来源:互联网 发布:阿里云合作伙伴有哪些 编辑:程序博客网 时间:2024/04/30 00:03
eclipse WTP项目提供了一个对使用EMF建立的model的保存方案.

这里是我自己写的一个小例子,一个datasource里包含若干个table,存在两种类型的tableltablestabletable又可以包含若干column。假设一个样本XML文档如下:

 

<?xml version="1.0" encoding="UTF-8"?>

<data-source>

    <table type="ltable" name="lt1" depart="xxx">

       <column name="some">

       </column>

    </table>

    <table type="stable" name="st1" age="1">

       <column/>

    </table>

</data-source>

 

那么我会马上使用EMF这样建立model:


这样用EMF的办法保存没有问题。

 

但是如果要使用WTP提供的框架来保存EMF生成的对象,这样的模型好象没有办法做到。因为WTP没有办法区分LTableStable

 

如果一定要继承,那么应该这样用EMF建模:



如果这样建模,那么WTP持久化的结果如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<data-source>

       <ltable name="lt1" depart="xxx">

           <column name="some"/>

       </ltable>

       <stable name="st1" age="1">

           <column/>

       </stable>

</data-source>

 

明显不符合要求,因为产生了两种element(ltablestable)。而且建立的模型也不符合常规。

 

解决办法:

不使用继承,如下所示:



这样通过UI来控制类型的选择和编辑,就可以达到要求。

EMF提供的持久化功能的优点是方便,快速。但是保存结果对用户来说复杂了一点。而且在多页面编辑器中,xml代码不能同步(如果手工编辑xml代码,那么在图形化编辑器下再修改并保存后会重新格式化xml代码)。

WTP提供的持久化功能优点是可以完全定制结果。保存结果简单。而且在多页面编辑器中是同步的。只是要多做一些工作。

 

我还是比较倾向用WTP提供的框架来保存EMF生成的对象。

参考:

Persisting EMF models with WTP

http://www.eclipse.org/articles/Article-WTP-Persisting-EMF/persisting.html

原创粉丝点击