我想移植一個遺留數據格式,它包含與Eclipse Modeling Framework(EMF)Ecore類似的概念:包含具有不同數據類型和默認值的參數的元素。Ecore和OCL中派生的屬性可以被持久化並且派生被禁用嗎?
一個定製的工具可讓您通過一個奇特的基於表格的GUI編輯這些模型實例。
此外,參數的一個共同特徵是可以添加推導規則,該參數指定自動從其他參數計算參數值。這似乎也類似於Ecore派生的屬性,可以通過Java代碼或OCLinEcore實現。
但是,傳統格式中參數的自動派生是可選的。即用戶可以始終選擇這樣的派生參數並選擇他或她想要手動輸入值。因此,即使導出的參數值也不是瞬態的,但始終保持不變,包括參數處於「自動」模式還是「手動」模式。
在Ecore中是否有任何方式(包括像OCLinEcore這樣的擴展)來持久化派生屬性並在運行時選擇性地/暫時地啓用/禁用派生?
解決方法可能不是使用Ecore的派生屬性功能,而是手動在客戶端代碼中實現可選的派生。但是,可選派生規則的聲明不是標準方式。任何方式重用OCLinEcore或類似?
感謝您採用這種方法。我對Xcore並不太熟悉:'uid_generated'是唯一的瞬態屬性,而'uid'和'uid_derived'會被持久化嗎? generateUUID是否會爲每次調用返回不同的值,因此您想要在生成後存儲一個值?所以我猜想當我的值可以確定性地產生時,我可以省略'_derived'持久屬性。 – Hauke
是的,'uid_generated'被派生出來,並且可以被視爲每次訪問此類的實例時調用的函數。 'uid'和'uid_derived'只是這個類的普通屬性。是的,'generateUUID()'函數每次調用都會爲您提供新的ID,因此您可以省略'uid'' uid_derived'之外的一個屬性。只需安裝xcore(也許你已經在Eclipse中安裝了它)並嘗試它!將xcore轉換爲ecore(以及後來的oclinecore)非常簡單。 – Piotr