使用使用持久化和WTP对象两种方案的模型区别有哪些?
使用使用持久化和WTP对象两种方案的模型区别有哪些?
eclipse WTP项目提供了一个对使用EMF建立的model的保存方案.这里是我自己写的一个小例子,一个datasource里包含若干个table,存在两种类型的table:ltable和stable,table又可以包含若干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没有办法区分LTable和Stable。
如果一定要继承,那么应该这样用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(ltable和stable)。而且建立的模型也不符合常规。
解决办法:
不使用继承,如下所示:
这样通过UI来控制类型的选择和编辑,就可以达到要求。
EMF提供的持久化功能的优点是方便,快速。但是保存结果对用户来说复杂了一点。而且在多页面编辑器中,xml代码不能同步(如果手工编辑xml代码,那么在图形化编辑器下再修改并保存后会重新格式化xml代码)。
WTP提供的持久化功能优点是可以完全定制结果。保存结果简单。而且在多页面编辑器中是同步的。只是要多做一些工作。
我还是比较倾向用WTP提供的框架来保存EMF生成的对象。
参考:
Persisting EMF models with WTP
http://www.eclipse.org/articles/Article-WTP-Persisting-EMF/persisting.html