我想移植一种遗留数据格式,它由类似于 Eclipse 建模框架 (EMF) Ecore 的概念组成:具有不同数据类型和默认值的参数的元素。
定制工具让您可以通过精美的基于表格的 GUI 编辑此类模型实例。
此外,参数的一个共同特征是可以添加一个推导规则,该规则指定参数值是从其他参数自动计算的。这似乎也类似于可以由 Java 代码或 OCLinEcore 实现的 Ecore 派生属性。
但是,传统格式的参数的自动派生是可选的。 IE。用户总是可以选择这样的派生参数并选择他或她想要手动输入值。因此,即使派生的 Parameter 值也不是 transient 的,而是始终存在的,包括参数是处于“自动”还是“手动”模式的状态。
Ecore(包括 OCLinEcore 之类的扩展)中是否有任何方法可以保留派生属性并在运行时选择性/临时启用/禁用派生?
解决方法可能是不使用 Ecore 的派生属性功能,而是在客户端代码中手动实现可选派生。但是,可选派生规则的声明将不是标准方式。有什么方法可以重用 OCLinEcore 或类似的东西?
最佳答案
以下是我在 Xcore 中的操作方法| :
interface Identifier {
id String uid
boolean derive_enabled = "true"
unsettable String uid_derived
readonly String uid_generated get { // this is the 'derived' parameter
if (uid_derived == null || uid_derived.isEmpty) {
uid_derived = EcoreUtil.generateUUID().toString
}
if (derive_enabled) {
uid = uid_derived
}
return uid
}
}
您也可以在 Ecore/OCL-in-Ecore 中轻松实现它。
我保留了参数的派生值,但我总是可以通过更改 bool 参数的值来手动更改它(如果我喜欢的话)。然后,我为我需要的任何类实现此接口(interface),因此我在全局范围内拥有此功能。
关于eclipse-emf - 可以在 Ecore 和 OCL 中保留派生属性并禁用派生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903043/