我是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
答案 0 :(得分:2)
您的IDL有两个方面值得关注。
首先是继承机制,传统上DDS不支持,但现在凭借Extensible and Dynamic Topic Types规范。下面的代码段显示了如何使用它。但是,您是否确实需要该继承机制取决于您将如何使用该数据。您是否打算订阅基类car
,还是只订阅派生类?在第一种情况下,您将需要真正的继承。在第二种情况下,您可以通过将汽车基础结构嵌入到所有派生汽车中来建模继承。
然后还有carpool
和car
类之间的一对多关系问题。使用序列通常不是最好的方法。假设您将单车添加到carpool
,那么整个carpool
结构及其所有车辆都需要重新发布。这可能是您想要的,但通常情况下,最好使用car
类上的“外键”来引用它所属的carpool
。这很像常规数据库设计的工作方式。通过这种方法,应用程序负责通过carpoolId
属性关联它们来重新构建汽车的完整拼车。然后通过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;
};
};
答案 1 :(得分: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;
};
等等......
了Gerardo