Лучший способ избежать тысячи заявлений?
У меня в основном есть эта проблема: прямо сейчас, у нас есть система, где она получает строку в качестве ввода, и она в основном говорит ДЕЙСТВИЕ:.
Для каждого из действий есть автоматически сгенерированная функция (Rational Rose GRRR), такая как
bouncer_comm.chatMessage("data goes here").sendAt(msg->sapIndex0());
bouncer_comm.askforname().sendAt(msg->sapindex0());
bouncer_comm
возвращает RTOutSignal
Я не могу создать их вручную из-за странной структуры, которую использует Rose.
Прямо сейчас, мой единственный вариант - создать около сотни операторов if, где я делаю:
if(action == "CHAT") bouncer_comm.chatMessage("data goes here").sendAt(msg->sapIndex0());
Что действительно раздражает.
Каков наилучший способ избежать этого? Я смотрел / пробовал множество вещей, это действительно старая версия рациональной розы (до 2к) и да.
Если у кого-то есть идеи, это было бы замечательно.
5 ответов
Мне нравится идея @cobbal о хэше указателя на функцию выше, но вы можете заменить эту условную логику полиморфизмом.
см.: http://c2.com/cgi/wiki?ReplaceConditionalWithPolymorphism
Я использовал полиморфизм в сочетании с заводским рисунком. Я сократил много, если это к этому:
MyAbstractClass *ac = Factory::getHandlerFor(data);
ac->perform(parameters);
Вы можете использовать boost:: bind или boost:: function и карту. Это позволит вам вызывать правильную функцию, даже знать, что каждая функция имеет разное количество параметров.
Если вам не нужен дополнительный код, вы можете использовать функциональные объекты и наследование.