Я использую protobuf для реализации протокола связи между приложением Java и собственным приложением, написанным на C ++. Сообщения управляются событиями: когда событие происходит в приложении C ++, создается и отправляется сообщение protobuf. * 1003 *
message MyInterProcessMessage {
int32 id = 1;
message EventA { ... }
message EventB { ... }
...
}
В Java я получаю на своем сокете объект класса: MyInterProcessMessageProto
. Отсюда я могу очень легко получить свои данные, поскольку они инкапсулированы друг в друга: myMessage.getEventA().getName();
У меня две проблемы:
Как делегировать обработку полученных сообщений?
Потому что, анализ всего сообщения и различение различных типов событий и действий, которые они подразумевают, привели к огромному и не поддерживаемому методу со многими случаями if.
Я хотел бы найти шаблон, в котором я могу сохранить сообщения и не только применить их, но и отменить их, например, Шаблон команды используется для реализации этого.
Мой первый подход: создать разные классы-оболочки для каждого события с указанным методом apply()
и undo()
и таким образом делегировать задание.
Однако я не уверен, что это правильный путь или нет лучших решений.
Чтобы уточнить мою заявку:
Приложение Java моделирует работающую виртуальную машину Java и хранит информацию, например, «Потоки», «Мониторы», «Память» и т. Д.
Каждое событие меняет текущее состояние моделируемой JVM. Например, был запущен новый поток, другой поток перешел в состояние блокировки, память была освобождена и т. Д. В том же значении моделируются события: ThreadEvent, MemoryEvent и т. Д.
Это означает, что сообщения должны обрабатываться последовательно. Чтобы вернуться к предыдущим состояниям JVM, я хотел бы реализовать эту функцию отмены.
Для отмены я уже пробовал. clearAllStates, применять события до события # i.
К сожалению, с более чем 20 000 событий это абсолютно неэффективно.