我正在掌握 EMF,我想检查一下我脑海中的概念是否准确。
我知道可以在 Eclipse 中创建一个 EMF 模型,然后使用它来生成 Java 代码。
我进一步了解模型可以序列化到磁盘然后再返回,但我不明白这个的用途。
当然可以保存模型文件本身吗?序列化是否有明显的用例?
我正在掌握 EMF,我想检查一下我脑海中的概念是否准确。
我知道可以在 Eclipse 中创建一个 EMF 模型,然后使用它来生成 Java 代码。
我进一步了解模型可以序列化到磁盘然后再返回,但我不明白这个的用途。
当然可以保存模型文件本身吗?序列化是否有明显的用例?
我认为,您在这里混淆了这两个术语:“元模型”和“模型”。
EMF 模型实际上是一个元模型:它是对可以保存数据的模型的描述。EMF 模型/元模型可以用许多不同的格式表示。对于 EMF,我们通常使用.ecore/.genmodel
或.xcore
文件。
从 EMF 模型/元模型中,您可以生成表示模型和模型上的操作的 Java 代码。从理论上看,EMF 模型和 Java 代码是等价的,因为它们代表了相同的信息。
使用生成的 Java 代码,您可以实例化对象以保存模型数据。然后可以将这些数据以多种不同格式保存到磁盘。EMF 可以自动提供将模型数据序列化到 XML 磁盘并返回所需的代码。(实际上,没有涉及到生成的代码——这一切都是基于你的模型在...Factory
类中的描述)。实现其他格式相当容易,例如 JSON 或数据库模式。
一个例子:
假设您使用 EMF 来描述自行车的模型(车轮、车把、车架、车座等)。从 EMF 模型中,您可以生成 Java 类,这些类可以根据对象和它们之间的关系来描述相同的自行车。
您现在可以通过创建/构造和连接 Java 类的对象来在模型中实例化许多不同的自行车。
然后可以将这些自行车序列化为 XML 并返回,因此您可以将自行车保存到磁盘。
使用 MDA(模型驱动架构),我们实际上谈论了 4 个级别的模型:
.ecore
文件和...Package
类中找到的信息在 M3 模型中表示,因为它们描述了 M2 模型。后者真的只对我们这些教MDA的人很重要...在您的正常工作中,您真的只需要考虑M0,M1和M2...
序列化是指持久化模型实例的内容(您的数据)。您可以序列化为 XML、JSON、数据库等。