Как моделировать в idl для DDS
Я новичок в DDS и IDL, и я надеюсь, что кто-то может дать несколько советов о том, как смоделировать следующее в IDL.
Это основано на модели с точки зрения ОО, и это просто в качестве быстрого примера:
И это моя исходная модель в 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;
};
};
Это просто выдуманный пример наследования, и, собственно, не самый лучший; о)
Это правильно или есть лучший способ моделирования - кто-нибудь может дать ссылку на хороший "HOWTO" для работы с IDL для DDS? Примечание: я работаю с RTI Connext DDS
2 ответа
Есть два аспекта в вашем IDL, которые заслуживают некоторого внимания.
Во-первых, это механизм наследования, который традиционно не поддерживался DDS, но теперь благодаря спецификации Extensible и 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;
};
};
В новой спецификации 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;
};
И так далее...
Херардо