我的 EClass 中有一些属性,我想在创建实例时将其初始化为计算值。我想知道使用框架执行此操作的推荐方法是什么。
在一种情况下,我想将 id 属性初始化为 UUID。在这种情况下,我希望在首次创建对象时分配 UUID 值,然后在对象的生命周期内保持不变。
在另一种情况下,我想生成一个只需要在模型实例中唯一的短 id。
我是 EMF 的新手,非常感谢任何指导。
我的 EClass 中有一些属性,我想在创建实例时将其初始化为计算值。我想知道使用框架执行此操作的推荐方法是什么。
在一种情况下,我想将 id 属性初始化为 UUID。在这种情况下,我希望在首次创建对象时分配 UUID 值,然后在对象的生命周期内保持不变。
在另一种情况下,我想生成一个只需要在模型实例中唯一的短 id。
我是 EMF 的新手,非常感谢任何指导。
suppress Setter
在这两种情况下,我通常都会在默认构造函数中创建属性并初始化它们。
EcoreUtils.generateUUID()
nextID
属性不是unchangeable
我们必须(通常)能够加载 XML 文件的,并且这些属性必须优先于构造函数中设置的属性。
类唯一 id 稍微难以处理,因为我们还必须nextID
在应用程序启动时初始化为一个好的值。
考虑我们首先创建多个对象然后加载旧文件的顺序:我们如何确保对象之间没有重复?一种可能的方法是将 id 分为两部分:时间戳和序列号。假设我们不能在时间戳的分辨率(通常是一秒)内重新启动应用程序,这可以正常工作。
这个解决方案仍然假设我们永远不需要加载两个或多个旧文件,因为如果在不同的应用程序实例中同时创建这些文件可能会发生冲突......
总而言之,我通常坚持使用 UUID,因为这种方法避免了上述所有问题 :-)