使用使用持久化和WTP对象两种方案的模型区别有哪些?

使用使用持久化和WTP对象两种方案的模型区别有哪些?

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:

使用使用持久化和WTP对象两种方案的模型区别有哪些?

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

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

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

使用使用持久化和WTP对象两种方案的模型区别有哪些?

如果这样建模,那么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)。而且建立的模型也不符合常规。

解决办法:

不使用继承,如下所示:

使用使用持久化和WTP对象两种方案的模型区别有哪些?

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

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

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

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

参考:

Persisting EMF models with WTP

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