我在我的EClasses中有一些屬性我想在創建實例時初始化爲計算值。我想知道使用該框架的建議方法是什麼。創建EObject時自動生成要素值的最佳方式是什麼?
在一種情況下,我想將id屬性初始化爲一個UUID。在這種情況下,我想在首次創建對象時分配UUID值,然後在對象的整個生命週期中保持不變。
在另一種情況下,我想生成一個簡短的ID,只需要在模型實例內是唯一的。
我是EMF新手,非常感謝任何指導。
我在我的EClasses中有一些屬性我想在創建實例時初始化爲計算值。我想知道使用該框架的建議方法是什麼。創建EObject時自動生成要素值的最佳方式是什麼?
在一種情況下,我想將id屬性初始化爲一個UUID。在這種情況下,我想在首次創建對象時分配UUID值,然後在對象的整個生命週期中保持不變。
在另一種情況下,我想生成一個簡短的ID,只需要在模型實例內是唯一的。
我是EMF新手,非常感謝任何指導。
在這兩種情況下,我通常會使屬性suppress Setter
並在默認構造函數中初始化它們。
EcoreUtils.generateUUID()
nextID
的屬性是不製成unchangeable
,因爲我們必須(通常)能夠裝載生成的類的唯一ID生成一個XML文件,這些文件必須優先於在構造函數中設置的文件。
該類的唯一ID稍微難於處理,因爲我們還必須在應用程序啓動時將nextID
初始化爲一個很好的值。
請考慮我們先創建多個對象然後加載一箇舊文件的順序:如何確保對象之間沒有重複?一種可能的方法是將ID分成兩部分:時間戳和序列號。假設我們無法在時間戳的分辨率內(通常爲一秒)重新啓動應用程序,這工作好點。
該解決方案還假設我們永遠需要加載兩個或兩個以上的老文件,就好像在不同的應用程序實例,同時創造了這些可能發生衝突....
所有功能於一切,我通常與堅持UUIDs,因爲這種方法避免了所有上述問題:-)
因此在工廠設置生成的密鑰會更好,然後嘗試修改工廠? –
@Eric Rosenberg如果可能,我會在構造函數中設置它。或者在某些情況下使用工廠方法... –