Si tratta di una struttura di codice appropriata o ce n'è una migliore?

1

Questa è un'app per iOS, ma cercherò di renderla il più generica possibile perché penso che un vasto pubblico potrebbe avere un buon feedback.

Ho un'applicazione che sto facendo per iOS. Dispone di 4 schede principali in un controller della barra delle linguette. Vi sono tre oggetti del modello principale. Diciamo che sono mela, macchina e orologio. La prima scheda richiede l'accesso a tutte le mele da un'API, la seconda ha bisogno di tutte le auto e la terza ha bisogno di tutti gli orologi. La quarta scheda richiede l'accesso a tutti e tre gli elenchi di oggetti.

Ho già implementato le prime 3 schede e una volta che l'utente va alla prima scheda verrà caricato in tutte le mele, lo stesso per le altre 2 schede. Ma ora, mentre sto iniziando la quarta scheda, non voglio caricare di nuovo tutti gli oggetti (potrei, ma sembra sbagliato).

Andrò avanti e darò quello che penso possa essere corretto e quindi spero di ottenere un feedback se questo è corretto o se c'è una soluzione migliore.

Soluzione proposta : una classe che contiene un elenco di mele, automobili e orologi. Quindi ciascuna scheda otterrà l'elenco necessario da questa classe. Se l'elenco non è stato recuperato, la classe contenente gli elenchi chiamerà l'api per recuperare l'elenco necessario. Quindi immagino un oggetto con 3 oggetti singleton, è questo il design del codice corretto?

Quindi per quanto riguarda la struttura del codice avrei

Modello: - Auto - Apple - Orologio - ListHolder (c'è un modo migliore per nominarlo?)

Controller: - Controller di rete (per chiamare l'api)

Visualizza controller: -I 4 controller di visualizzazione

    
posta tnek316 04.02.2016 - 01:48
fonte

2 risposte

1

Caricalo di nuovo tutto ... ma utilizza la memorizzazione nella cache più in generale nella tua applicazione.

Ora non devi preoccuparti del doppio caricamento.

Congratulazioni: hai appena scritto la tua prima applicazione "scalabile". :)

    
risposta data 04.02.2016 - 02:30
fonte
0

Suggerirei di metterli in una cache in qualche modo e il modo più semplice per farlo è usare NSURLCache . Puoi creare un semplice wrapper sopra di esso che sia conforme a e.x. <Cache> protocol, in modo che tu possa cambiare il tuo provider di cache senza interrompere alcun pezzo di codice in seguito.

Puoi impostare NSURLCache di Apple come questo

NSUInteger cacheSizeMemory = 5*1024*1024; // 5 MB
NSUInteger cacheSizeDisk = 5*1024*1024; // 5 MB
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];

E quindi puoi impostarlo sul tuo NSURLSessionConfiguration oggetto

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.example.apple-samplecode.SimpleBackgroundTransfer.BackgroundSession"];
configuration.URLCache = [NSURLCache sharedURLCache];
configuration.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
    
risposta data 08.02.2016 - 13:15
fonte

Leggi altre domande sui tag