2

私は DDS と IDL を初めて使用します。IDL で以下をモデル化する方法について、誰かがアドバイスを提供できることを願っています。

これは OO の観点からのモデルに基づいており、簡単な例として意図されています。 ここに画像の説明を入力

そして、これは IDL での私の最初のデータモデルです - 正しく行われていますか? IDL で継承と依存関係を「モデル化」するにはどうすればよいですか? オンラインの例の多くは非常に単純です-私が見つけたものは単純すぎます...

module test{
struct carpool{
    long id; //@key
    string name;
    sequence<car> cars;
};

struct car{
    long id; //@key
    string color;
};
////the following inherits from car
struct sedan{
    string extra_equipment;
};

struct station_car{
    integer number_of_doors;
};
};

これは継承の構成にすぎず、適切には最適ではありません ;o)

これは正しいですか、それとも同じモデルを作成するためのより良い方法がありますか? DDS の IDL を操作するための適切な「HOWTO」へのリンクを提供できる人はいますか? 注: RTI Connext DDS を使用しています。

4

2 に答える 2

3

IDL には、注目に値する 2 つの側面があります。

最初に継承メカニズムがあります。これは従来 DDS ではサポートされていませんでしたが、Extensible and Dynamic Topic Types仕様のおかげでサポートされています。以下のスニペットは、その使用方法を示しています。ただし、その継承メカニズムが実際に必要かどうかは、データをどのように使用するかによって異なります。base-class をサブスクライブするつもりですcarか、それとも派生クラスのみをサブスクライブしますか? 最初のケースでは、真の継承が必要になります。2 番目のケースでは、車のベース構造をすべての派生車に埋め込むことで、継承をモデル化できます。

carpool次に、とcarクラスの間の 1 対多の関係の問題もあります。通常、シーケンスを使用することは最善の方法ではありません。に 1 台の車を追加すると、構造carpool全体carpoolとそのすべての車を再パブリッシュする必要があるとします。これはあなたが望むものかもしれませんが、通常は、クラスの「外部キー」を使用して、それが属するcarクラスを参照する方が適切です。carpoolこれは、通常のデータベース設計が機能する方法とよく似ています。このアプローチでは、アプリケーションはcarpoolId属性を介して車を関連付けることで、完全なカープールを車で再構築する責任があります。carpoolthenへの更新は、car構造体を介して行われます。これにはcarcarpoolそれはしかしに属します。

考えられるスニペットの例:

module test {

  struct carpool {
    long   id; //@key
    string name;
  };

  struct car {
    long   id; //@key
    long   carpoolId; // refers to carpool this car belongs to
    string color;
  };

  struct sedan : car {
    string extra_equipment;
  };

  struct station_car : car {
    integer number_of_doors;
  };
};
于 2013-03-11T14:39:31.663 に答える
0

新しい DDS Extensible Type 仕様では、IDL での構造継承のサポートが導入されました。RTI Connext DDS バージョン 5.0.0 以降を使用している場合は、すでにこの機能を利用できます。

構文は次のようになります。

struct car {
    long id; //@key
    string color;
};

struct sedan : car {
    string extra_equipment;
};

struct station_car : car {
    integer number_of_doors;
};

などなど…

ジェラルド

于 2013-03-11T14:25:28.440 に答える