14

Ecco un disegno/domanda migliore pratiche ..migliori pratiche per la "data layer" client Android Le

Sono nuovo di sviluppo di Android, e fondamentalmente nuova di soluzioni web/mobile.

Quindi, la mia domanda è: quali sono le migliori pratiche quando si organizza la struttura dell'applicazione Android che ottiene i dati dal server remoto?

La richiesta al server di entrare in una classe che comunica con il server (richieste di ricezione e di invio) o dovrei guardare le mie richieste come origine dati, vale a dire che ogni classe di dati la gestisce autonomamente?

o dovrei avere più livelli di astrazione: un livello per l'acquisizione dei dati, altro per il modello che utilizza alcune interfacce senza sapere da quali dati di origine provengono?

Sono curioso come esperto sviluppatori di Android si avvicinano a questi problemi di progettazione ...

risposta

9

Virgil Dobjanschi presentation è una buona risorsa come sottolineato in precedenza, che fondamentalmente ti dice di eseguire le tue richieste da un servizio in background in modo che l'attività non venga distrutta e di archiviare i tuoi dati nel database il prima possibile.

Per maggiori dettagli tecnici, il modo in cui lo faccio è quello di dividere l'applicazione in tre componenti:

1- Biblioteca per incapsulare la gestione della richiesta HTTP e la risposta (con ApacheHTTP), che può gestire semplici richiesta/risposta e funzionalità avanzate che potrebbero coinvolgere i cookie (possono essere necessari per il login) e la modifica dell'intestazione HTTP.

2- Livello Marshal/Unmarsha, dove analizzo i dati del server (ad esempio XML o JSON) e li converto in oggetti (cioè i modelli) che verranno gestiti dal resto della mia app.

3- Strato di persistenza.

Come da presentazione di Dobjanschi, di solito faccio richieste di dati eseguite in un servizio non in un thread worker all'interno dell'attività.

+0

Questo è un ottimo video, grazie! Ora, sto provando a implementarlo, specialmente il pattern B (activity-> contentProvider -> ServiceHelper -> Service -> Rest -> Processor), e ora sto facendo fatica a capire come dovrebbe essere fatto. Non capisco qual è la granularità di questo servizio, ad esempio, se ho i miei oggetti modello, o una tabella di database chiamata User, UserDetails, City, Category, ecc ... dovrei avere queste classi per tutti i "tipi di dati" o specializzato? – daneejela

+0

Ad esempio, dovrei avere UserProcessor, CategoryProcessor (ecc.), UserService, CategoryService (ecc.) UserContentProvide, CategoryContentProvider (ecc.)? – daneejela