protobuf mesaj değiştirilemeyen listeler kullanır ve veri yapısı olarak kullanmaya çalışıyorum

Veri almak için bir web sunucusu ile iletişim kurarak bir android uygulaması yazıyorum. Protobuf ve tüm eserleri cazibe gibi kullanmaya karar verdim.

Ancak benim sorunum budur, veri kümem çok büyük ve tüm verileri bir kerede elde edemiyorum, böylece sadece en üst seviyeye ulaşıyorum ve daha sonra da daha fazla bilgi istiyorum (telefona göz atın).

Java sınıfımı oluşturmak için protok kullandım, bu da gayet güzel çalışıyor ve güzel parlak nesne yapısını istediğim gibi aldım (sadece en üst düzey veriyle). Ancak, uygulamada ana veri yapım olarak aldığım yapıyı kullanma kararını verdim ve bu uygulamadaki tüm listeler değiştirilemediğinden, daha fazla veri ile daha fazla veriye ulaşamıyorum ve bu benim için büyük baş ağrısına neden oluyor.

Şu an için, prototipin değiştirilemeyen yerine normal listeleri döndürmek için oluşturduğu otomatik olarak oluşturulmuş java dosyasını düzenledim, ancak daha sonra bu dosyayı yeniden oluşturmak gerekirse oldukça aptalca.

ne yapalım? protobuf nesnesini depolama olarak kullanamazsınız? (tüm bu verileri, zaten var olduğunda, özel bir nesneye kopyalamak, sadece kendi depolama sınıflarımın yazılmasından söz etmemek için israf gibi görünüyor).

2

1 cevap

Oluşturulan protokol tampon sınıflarını asla değiştirmemelisiniz.

Oluşturulan mesaj sınıfları, tasarım gereği değişmezdir. Bir nesneyi değiştirmek için mevcut Builder sınıfını mevcut olandan yeni bir mesaj oluşturmak için kullanmanız, setter metotları ile manipüle etmeniz ve ardından build() 'i çağırmanız gerekmektedir. değiştirilmiş nesne. Örneğin:

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

Protobuf eğiticisinde "Yapıcılar vs. Mesajlar" konusuna bakın:

http://code.google.com/apis/protocolbuffers/docs/javatutorial .html # inşaatçılar

1
katma
Teşekkür ederim. Gelen verileri oluşturucuya dönüştürmek ve daha sonra uygulamalar veri yapısı olarak saklamak iyi bir praxis olur muydu? ya da tek başına bir veri yapısına sahip olmanız tavsiye edilir mi?
katma yazar Rickard Liljeberg, kaynak
Ancak, oluşturucu yeni bir nesne döndürüyor ve .proto'mda iç içe geçmiş iletileri var çünkü yeni oluşturulan nesneyi ana nesne listesinde eklememe izin vermiyor.
katma yazar Rickard Liljeberg, kaynak
Tek bir kod satırında belirli bir nesne için bir oluşturucuya erişilebilir veya oluşturulabilir, bu yüzden neden saklamak istediğinizi anlamıyorum. Google'a göre, en iyi uygulama, oluşturulan protokol arabellek sınıfını kendi uygulamanıza özel sınıfta sarmaktır (bağlantılı öğreticide "Protokol Arabelleği ve O-O Tasarımı" konusuna bakın).
katma yazar Jeff Gilfelt, kaynak