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

2024-02-01 23:18

本文主要是介绍使用EMF持久化和WTP持久化EMF对象两种方案的模型区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于使用EMF持久化和WTP持久化EMF对象两种方案的模型区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668778

相关文章

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会