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)

这是正确的还是有更好的建模方法 - 任何人都可以提供一个好的“HOWTO”链接,用于使用 IDL for DDS?注意:我正在使用 RTI Connext DDS

4

2 回答 2

3

IDL 中有两个方面值得关注。

首先是继承机制,传统上 DDS 不支持这种机制,但现在借助可扩展和动态主题类型规范。下面的片段显示了如何使用它。但是,您是否真的需要这种继承机制取决于您将如何使用数据。您是否打算订阅基类car,还是只订阅派生类?在第一种情况下,您将需要真正的继承。在第二种情况下,您可以通过将汽车基础结构嵌入到所有派生汽车中来对继承进行建模。

carpool然后还有你的和car类之间的一对多关系的问题。使用序列通常不是最好的方法。假设您将单个汽车添加到您的carpool中,那么整个carpool结构及其所有汽车都需要重新发布。这可能是您想要的,但通常最好在类上使用“外键”car来引用carpool它所属的类。这很像常规数据库设计的工作方式。carpoolId使用这种方法,应用程序负责通过属性将它们与汽车相关联来重建完整的拼车。then 的更新carpool通过car结构发生。这确实需要car了解carpool它属于虽然。

可能的示例片段:

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 可扩展类型规范引入了对 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 回答