EMF 模型的系列化

Joe*_*Joe 1 eclipse serialization model eclipse-emf emf

我正在掌握 EMF,我想检查一下我头脑中的概念是否准确。

据我了解,可以在 Eclipse 中创建 EMF 模型,然后使用它来生成 Java 代码。

我进一步了解模型可以序列化到磁盘然后再返回,但我不明白它的用途。

当然模型文件本身可以保存吗?序列化有明显的用例吗?

Ton*_*sen 5

我认为,您在这里混淆了这两个术语:“元模型”和“模型”。

EMF 模型实际上是一个元模型:它是对可以保存数据的模型的描述。EMF 模型/元模型可以用许多不同的格式表示。对于 EMF,我们通常使用.ecore/.genmodel.xcore文件。

从 EMF 模型/元模型,您可以生成表示模型和模型上的操作的 Java 代码。从理论层面来看,EMF模型和Java代码是平等的,因为它们代表相同的信息。

使用生成的 Java 代码,您可以实例化对象来保存模型数据。然后,这些数据可以以多种不同的格式保存到磁盘上。EMF 可以自动提供将模型数据以 XML 形式序列化到磁盘并返回所需的代码。(实际上,不涉及生成的代码 - 它完全基于类中模型的描述...Factory)。实现其他格式相当容易,例如 JSON 或数据库模式。


一个例子:

假设您已使用 EMF 来描述自行车模型(车轮、车把、车架、车座等)。从 EMF 模型中,您可以生成 Java 类,这些类可以根据对象及其之间的关系来描述相同的自行车。

现在,您可以通过创建/构造和连接 Java 类的对象来实例化模型中的许多不同自行车。

然后可以将这些自行车序列化为 XML 并返回,以便您可以将自行车保存到磁盘。


对于MDA(模型驱动架构),我们实际上讨论了4个级别的模型:

  • M0 通常是物理工件。例如自行车或纸质账单。
  • M1 是物理工件的表示 - 这是模型
  • M2 是模型的描述 - 元模型 - 在本例中是基于 EMF 的模型,描述模型的实体、关系和属性
  • M3 是模型描述的描述 - 元元模型 - 实际上也可以用 EMF 表示。.ecore您在文件和类中找到的信息...Package在 M3 模型中表示,就像它们描述 M2 模型一样。

后者真的只对我们这些教授 MDA 的人来说很重要......在你正常的工作中,你真的只需要考虑 M0,M1 和 M2......