Есть некий набор компонент они деляться на сетевые и локальные.
Приложение должно показать список найденных компонент, и принимать решение
можно или нет выполнить данную операцию над данным устройством.
В данный момент дизайн выглядит следующим образом:
Есть абстактный интерфейс:
enum Type {
Local,
Net,
};
struct ComponentId {
union {
NetId,
LocalId
} data;
bool compare(ComponentId, ComponentId);
};
struct IComponent {
virtual CompoentId id();
virtual Type type();
virtual void update();
};
struct ILocalComponent : public IComponent {
virtual int characteristic1();
...
};
struct INetComponent : public IComponent {
virtual double some_info();
};
Есть некий CompoentId используемый для сортировки списка, и сериализации в базу данных,
IComponent содержаший общие методы и ILocalCompoent и INetComponent для получения более конкретной
информации.
Не нравиться "union" в ComponentId, но решение в виде LocalComponentId и NetComponentId,
намного увеличит иерархию.
Еще не нравиться использование следующего алгоритма каждый раз и обращении к IComponent:
IComponent *component;
if (component->type() == Net) {
INetComponent *c = dynamic_cast<INetComponent *>(component);
ASSERT(c != NULL);
//work
} else if (component->type() == Local) {
ILocalComponent *c = dynamic_cast<ILocalComponent *>(component);
ASSERT(c != NULL);
//work
}
Есть идеи по улучшению архитектуру с целью уменьшения дублирования кода,
сокращения его размера, облегчения добавления нового типа в ряд Local, Net?