0

エンティティのタイプを表す一連の概念があります。

サンプル コンセプト: Loopwith children loopCount: IntegerProperty[1] HttpRequestwith children url: StringProperty[1]hostName: StringProperty[1]

どちらの概念も概念を拡張AbstractTestElementします (名前、コメントなどの共通のプロパティを定義します)。

次のようにbaseLanguageに生成されLoopたい:HttpRequest

ループ:

Loop e = new Loop();
e.setProperty(new IntegerProperty("loopCount", node.loopCount));

HttpRequest:

HttpRequest e = new HttpRequest();
e.setProperty(new StringProperty("url", node.url));
e.setProperty(new IntegerProperty("host", node.hostName));

私が望むのは、この共通のロジックをカバーする共通のジェネレーター テンプレートを用意してsetProperty、さまざまな種類のテスト要素で繰り返されないようにすることです。テスト要素に固有の処理が必要なプロパティもありますが、プロパティが 1 対 1 で変換される場合が多いため、

質問は次のとおりです。Loop/HttpRequest の概念構成にメタデータを添付するにはどうすればよいですか? それを行うMPSの慣用的な方法は何ですか?

1) に入れる名前として「プロパティの名前」を使用できますがnew XXXProperty、理想的にはHttpRequest.HOST_PROPERTY_NAME一種の参照を使用するため、「プロパティの名前」では不十分です。

2)おそらく注釈を発明し、概念のプロパティに注釈を付ける可能性があります.MPS自体はそのアプローチを使用していないようです.

3) (ab) 概念の動作を使用して返す<quotation new StringProperty("url", node.url) >と、さらにぎこちなく見えます。

4

1 に答える 1

0

どちらのアプローチも、物事がどのように生成されるかを認識していない言語の側面にジェネレーターの動作を追加するため、私はむしろ 2. と 3. を使用しません。基本的に、構造体とジェネレーターを密結合します。

1 を選択した場合でも、その静的クラス アプローチを使用できます。Java クラスであり、すべてのフィールドを含むジェネレーターで新しいルートノードを作成します。そして、などを削減する汎用ジェネレーターテンプレートを用意IntegerPropertyします...それらに共通のスーパーコンセプトがあれば、それはかなり簡単に行うことができます。プロパティが含まれている概念の前に生成されることを確認する必要があります。そうすれば、親のロールに引き続きアクセスし、その情報を使用してフィールド アクセスを生成できます。

于 2015-06-06T11:45:26.857 に答える