4

Eclipse Modeling Framework (EMF) Ecore に似た概念で構成される従来のデータ形式を移植したいと考えています。異なるデータ型とデフォルト値を持つパラメーターを持つ要素。

カスタムメイドのツールを使用すると、このようなモデル インスタンスを洗練されたテーブル ベースの GUI で編集できます。

また、パラメータの共通機能は、パラメータ値が他のパラメータから自動的に計算されることを指定する派生ルールを追加できることです。これは、Java コードまたは OCLinEcore によって実装できる Ecore 派生属性にも似ているようです。

ただし、レガシー形式でのパラメータの自動導出はオプションです。つまり、ユーザーはいつでもそのような派生パラメーターを選択し、値を手動で入力することを選択できます。したがって、派生したパラメータ値も一時的なものではなく、パラメータが「自動」モードか「手動」モードかを含め、常に永続化されます。

Ecore (OCLinEcore などの拡張機能を含む) で派生属性を永続化し、実行時に派生を選択的/一時的に有効/無効にする方法はありますか?

回避策として、Ecore の派生属性機能を使用するのではなく、オプションの派生をクライアント コードに手動で実装することが考えられます。ただし、オプションの派生規則の宣言は標準的な方法ではありません。OCLinEcore などを再利用する方法はありますか?

4

2 に答える 2

4

Xcoreで行う方法は次のとおりです。

interface Identifier {
    id String uid
    boolean derive_enabled = "true"
    unsettable String uid_derived

    readonly String uid_generated get {  // this is the 'derived' parameter
        if (uid_derived == null || uid_derived.isEmpty) {
            uid_derived  = EcoreUtil.generateUUID().toString
        }
        if (derive_enabled) {
            uid = uid_derived
        }
        return uid
    }
}

Ecore/OCL-in-Ecore でも簡単に実装できます。

パラメーターの派生値を永続化しますが、ブール値パラメーターの値を変更することで、(必要に応じて) いつでも手動で変更できます。次に、必要なクラスにこのインターフェイスを実装するので、この機能をグローバルに使用できます。

于 2016-02-24T09:42:41.197 に答える
0

それが直接可能であるとは確信していません。問題は、手動と派生の 2 つの値があり、どちらも同じである可能性があることです。派生が永続化されていない場合は簡単です。しかし、派生が永続化されている場合、どれがマスターであるかをどのように知ることができますか。

EMF プロパティ ビューでも同様の問題が発生します。ここでは、計算された値と明示的な値を灰色/非灰色の背景で区別すると便利です。たとえば、GenModel Edit Plugin Id は、計算されたものまたは明示的なものです。さらに悪いのは、空白の Property default-literal が設定されていないか、明示的に空白です。

メタモデルに master-flag を追加すると、比較的簡単になります。それまでは、ほとんどの場合に機能するソリューションが得られるかもしれませんが、それ以外の場合は混乱する可能性があります.

于 2018-05-07T11:23:50.433 に答える