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