1

EClassesにいくつかの属性があり、インスタンスの作成時に計算値に初期化したいと思います。フレームワークを使用してこれを行うための推奨される方法は何ですか?

あるケースでは、id属性をUUIDに初期化したいと思います。この場合、オブジェクトが最初に作成されたときにUUID値が割り当てられ、その後、オブジェクトの存続期間中は同じままになります。

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

私はEMFを初めて使用するので、ガイダンスをいただければ幸いです。

4

1 に答える 1

1

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

  • UUIDは次の方法で生成されますEcoreUtils.generateUUID()
  • クラスの一意の ID はクラス static から生成されますnextID

(通常) XML ファイルをロードできる必要があり、これらはコンストラクターで設定されたものよりも優先される必要があるため、属性は作成されません。unchangeable

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

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

このソリューションは、異なるアプリケーション インスタンスで同時に作成された場合に競合する可能性があるため、2 つ以上の古いファイルを読み込む必要がないことを前提としています....

全体として、この方法は上記の問題をすべて回避するため、通常は UUID を使用します :-)

于 2011-06-25T11:27:19.170 に答える