protobuf повідомлення використовує незмінні списки і я намагаюся використовувати його як структуру даних

Я пишу андроїд додаток, який спілкується з веб-сервером, щоб отримати дані. Я вирішив використати протобоф і все працює як шарм.

Однак моя проблема полягає в цьому, мій набір даних величезний, і я не можу отримати всі дані відразу, так що я просто отримати верхній рівень, а потім попросити більше, як я йду разом (перегляд по телефону).

Я використовував протоколи для створення мого класу Java, який працює просто чудово, і я отримую мій блискучий об'єкт структури, що так само, як я хочу його (початковий тільки з верхнього рівня даних). Однак я прийняв рішення використовувати структуру, яку я отримав як мою головну структуру даних у моєму додатку, і оскільки всі списки в цьому додатку незмінні, я не можу пізніше розширитись з більшою кількістю даних, і це викликає головний біль для мене.

На даний момент я просто редагував autogenerated java-файл, який протокол генерується для повернення нормальних списків, а не незмінюваний, але це досить німий, якщо мені пізніше потрібно регенерувати цей файл.

що робити? не використовувати protobuf об'єкт як сховище? (просто здається марнотратно копіювати всі ці дані до власного об'єкта, коли воно вже є, не кажучи вже про написання моїх власних класів зберігання.)

2

1 Відповіді

Ви ніколи не повинні змінювати створені класи буферів протоколів.

Сформовані класи повідомлень незмінні за проектом. Щоб змінити об'єкт, потрібно використати його відповідний клас Builder , щоб створити нове повідомлення з існуючого, маніпулювати ним за допомогою методів встановлення, потім викликати build() , щоб повернути змінений об'єкт. Наприклад:

person.toBuilder()
    .setName("Jeff")
    .addPhone(phoneNumber)
    .build();

Див. Розділ "Будівельники проти повідомлень" у підручнику protobuf:

http://code.google.com/apis/protocolbuffers/docs/javatutorial .html # будівельників

1
додано
Дякую. Було б добре праксис для перетворення вхідних даних для будівельника, а потім зберігати його в якості моєї структури даних додатків. чи рекомендується мати окрему структуру даних?
додано Автор Rickard Liljeberg, джерело
Але будівельник повертає новий об'єкт, і, оскільки у мене є вкладені повідомлення в своєму .proto, він не дозволить мені вставити знову генерований об'єкт у список батьківського об'єкта '.
додано Автор Rickard Liljeberg, джерело
Доступ до будівельника або його створення для даного об'єкта можна отримати в одному рядку коду, тому я не розумію, чому ви хочете його зберегти. Згідно з даними Google, найкраща практика полягає в тому, щоб загорнути клас створеного буфера протоколів у свій власний клас додатку (див. Розділ "Протокольні буфери та дизайн O-O" у зв'язаному підручнику).
додано Автор Jeff Gilfelt, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.