Дизайн схемы FlatBuffer для фреймворков

Мне нужен совет по структурированию схем FlatBuffer для фреймворка, который позволяет пользователям расширять типы данных, определенные фреймворком, но также позволяет разработчикам фреймворка добавлять новые поля при публикации новых версий фреймворка.

Первоначально я думал, что когда вы создаете проект с использованием этой среды, он будет генерировать несколько файлов схемы FlatBuffer, которые вы затем сможете отредактировать для своего конкретного проекта. Затем вы можете скомпилировать схемы и начать разработку кода, используя API-интерфейсы фреймворка.

Однако это становится проблемой, когда разработчики фреймворка решают добавить поля к базовым типам. Как вы, наверное, знаете, FlatBuffers требует, чтобы любые дополнительные поля были добавлены в конец (или, по крайней мере, имели более высокий идентификатор, чем другие поля). Таким образом, возникает конфликт между дополнениями, сделанными разработчиком фреймворка и пользователем фреймворка.

Одним из возможных решений было бы иметь набор «нерасширяемых пользователем» типов, которые принадлежат создателю фреймворка и которые не должны изменяться пользователями фреймворка; и эти типы затем будут встроены в типы данных, определенные пользователем платформы. Однако, учитывая ограничения на изменение размера полей, я не уверен, что это вообще сработает.

Я также готов услышать альтернативы использованию плоских буферов, если выяснится, что в противном случае нет хорошего решения.


person Talin    schedule 25.08.2019    source источник


Ответы (1)


Чтобы иметь такое открытое расширение, вам действительно нужно, чтобы авторы и пользователи фреймворка работали в двух отдельных таблицах... где один может владеть другим. Нет хорошего способа расширить одну таблицу, если все участники не используют общую схему в системе управления версиями.

Если эти расширения должны быть в одном объекте по какой-либо причине, то Protocol Buffers более гибок, чем FlatBuffers, поскольку он не требует идентификаторов смежных полей. Вы можете просто сказать, что все идентификаторы полей >=1000 предназначены, например, для пользователей фреймворка.

person Aardappel    schedule 25.08.2019