创建Object时自动生成要素值的最佳方法是什么?

时间:2011-06-25 00:00:26

标签: eclipse-emf eclipse-emf-ecore

我的EClasses中有一些属性我想在创建实例时初始化为计算值。我想知道使用框架建议的方法是什么。

在一种情况下,我想将id属性初始化为UUID。在这种情况下,我希望在首次创建对象时分配UUID值,然后在对象的生命周期内保持相同。

在另一种情况下,我想生成一个短ID,它只需要在模型实例中是唯一的。

我是EMF的新手,非常感谢任何指导。

1 个答案:

答案 0 :(得分:1)

在这两种情况下,我通常会创建属性suppress Setter并在默认构造函数中初始化它们。

  • UUID是通过EcoreUtils.generateUUID()
  • 生成的
  • 类唯一ID由静态类nextID
  • 生成

属性成为unchangeable,因为我们必须(通常)能够加载XML文件,这些属性必须优先于构造函数中设置的文件。

类的唯一ID稍微难以处理,因为我们还必须在应用程序启动时将nextID初始化为一个好的值。

考虑我们首先创建多个对象然后加载旧文件的顺序:我们如何确保对象之间没有重复?一种可能的方法是将id分为两部分:时间戳和序列号。假设我们无法在时间戳(通常是一秒)的分辨率内重新启动应用程序,那么这项工作就可以了。

此解决方案仍假设我们永远不需要加载两个或更多旧文件,因为如果在不同的应用程序实例中同时创建这些文件可能会发生冲突....

总而言之,我通常坚持使用UUID,因为这种方法避免了上述所有问题: - )