0

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

我知道可以在 Eclipse 中创建一个 EMF 模型,然后使用它来生成 Java 代码。

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

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

4

2 回答 2

4

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

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...

于 2013-04-08T19:00:55.857 回答
0

序列化是指持久化模型实例的内容(您的数据)。您可以序列化为 XML、JSON、数据库等。

于 2013-03-20T21:16:42.593 回答