Я впервые использую планшетные буферы. Я создал свои java классы и проверил сериализацию / десериализацию сообщения. Сейчас я думаю о том, как интегрировать их в мои приложения JavaFx и Android.
Допустимо ли передавать DataMessage
или MessageA
непосредственно в бизнес-классы c или мой интерфейс? Кажется, действительно неудобно передавать DataMessage, а затем извлекать правильный тип полезной нагрузки. Итак, я создал обертки для каждого типа, поэтому у меня есть MessageAWrapper
, который содержит MessageA
и Header
. Если код клиента / пользовательского интерфейса имеет прямой доступ к значениям из MessageA
, или лучше скопировать все поля из MessageA
в новые примитивы, определенные в MessageAWrapper
. Это, кажется, противоречит тому, для чего предназначены Flatbuffers, но я также чувствую себя грязно, разоблачая MessageA, который имеет специфичные для flatbuffers c методы анализа и тому подобное. Но это также немного работы, чтобы мои классы-обертки копировали поля и сохраняли их, и это может быть подвержено ошибкам. Но где-то в моем стеке я могу, скажем, добавить пару чисел с широтой / долготой в вспомогательный класс под названием GeographicPosition
. Я легко могу сделать это в оболочке.
Поэтому я спрашиваю, каковы наилучшие практики использования плоских буферов в приложении по абстракции / разделению задач. Большинство примеров, которые я вижу, просто делают быструю сериализацию для сравнения скорости с JSON синтаксическим анализом, и я не вижу полного практического примера его использования в приложении, скажем, для заполнения значений в элементах управления пользовательского интерфейса.
Для справки, я создал схему flatbuffers следующим образом:
table MessageA{
myVal1:float;
myVal2:float;
myVal3:int;
}
union MessagePayload { MessageA, MessageB, MessageC }
// top level message class. Contains a header, and a payload consisting of one of the message types specified in the MessagePayload union.
table DataMessage {
header:Header (required);
payload:MessagePayload (required);
}
root_type DataMessage;
Я делаю это, чтобы проверить тип полезной нагрузки, чтобы определить, какая у меня полезная нагрузка, и сериализовать ее.