2011-06-25 70 views
1

我在我的EClasses中有一些屬性我想在創建實例時初始化爲計算值。我想知道使用該框架的建議方法是什麼。創建EObject時自動生成要素值的最佳方式是什麼?

在一種情況下,我想將id屬性初始化爲一個UUID。在這種情況下,我想在首次創建對象時分配UUID值,然後在對象的整個生命週期中保持不變。

在另一種情況下,我想生成一個簡短的ID,只需要在模型實例內是唯一的。

我是EMF新手,非常感謝任何指導。

回答

1

在這兩種情況下,我通常會使屬性suppress Setter並在默認構造函數中初始化它們。

  • 的UUID經由EcoreUtils.generateUUID()
  • 從類的靜態nextID

的屬性是製成unchangeable,因爲我們必須(通常)能夠裝載生成的類的唯一ID生成一個XML文件,這些文件必須優先於在構造函數中設置的文件。

該類的唯一ID稍微難於處理,因爲我們還必須在應用程序啓動時將nextID初始化爲一個很好的值。

請考慮我們先創建多個對象然後加載一箇舊文件的順序:如何確保對象之間沒有重複?一種可能的方法是將ID分成兩部分:時間戳和序列號。假設我們無法在時間戳的分辨率內(通常爲一秒)重新啓動應用程序,這工作好點。

該解決方案還假設我們永遠需要加載兩個或兩個以上的老文件,就好像在不同的應用程序實例,同時創造了這些可能發生衝突....

所有功能於一切,我通常與堅持UUIDs,因爲這種方法避免了所有上述問題:-)

+0

因此在工廠設置生成的密鑰會更好,然後嘗試修改工廠? –

+0

@Eric Rosenberg如果可能,我會在構造函數中設置它。或者在某些情況下使用工廠方法... –

相關問題