2011-06-25 14 views
1

私はインスタンスを作成するときに計算値に初期化したい、EC眼鏡にいくつかの属性を持っています。私はフレームワークを使ってこれを行うための推奨される方法が何であるか疑問に思っています。EObjectの作成時に機能の値を自動生成する最適な方法は何ですか?

場合によっては、id属性をUUIDに初期化したいと思います。この場合、オブジェクトが最初に作成されたときにUUIDの値を割り当て、オブジェクトの存続期間中は同じままにしておきたいと思います。

別のケースでは、モデルインスタンス内で一意である必要がある短いIDを生成したいとします。

私はEMFを初めて使用しており、ご指摘いただければ幸いです。

答えて

1

どちらの場合でも、私は通常、属性suppress Setterを作成し、それらをデフォルトのコンストラクタで初期化します。

  • UUIDは、クラス固有のID属性は、我々は(通常)をロードすることができなければならないとしてunchangeableを行っていないあるnextID

静的クラスから生成されるEcoreUtils.generateUUID()

  • を介して生成されますXMLファイルであり、これらはコンストラクタで設定されたものよりも優先されなければなりません。

    クラス固有のIDは、アプリケーションの起動時にnextIDを適切な値に初期化する必要があるため、処理するのが少し難しいです。

    最初にいくつかのオブジェクトを作成し、古いファイルをロードするシーケンスを考えてみましょう。オブジェクト間に重複がないようにするにはどうすればよいですか?可能な方法の1つは、idをタイムスタンプとシーケンス番号の2つの部分に分割することです。私たちがタイムスタンプ(通常は1秒)の解決の範囲内でアプリケーションを再起動できないと仮定すると、これは大丈夫です。

    このソリューションは、まだ我々は、異なるアプリケーションインスタンスで同時に作成された場合には、これらが競合する可能性がありますように、2つの以上の古いファイルをロードする必要はありませんと仮定し

    ....

    オールインワンすべて、私は通常にこだわりますこの方法でUUIDを使用すると、上記の問題はすべて回避されます:

  • +0

    生成されたキーを工場で設定すると、工場を変更しようとする方が良いでしょうか? –

    +0

    @Eric Rosenberg可能であれば、コンストラクタで設定します。または場合によっては工場の方法で... –

    関連する問題