14

Hier ist ein Design/Best Practices Frage ..Best Practices für die "Datenschicht" im Android Client-Anwendungen

Ich bin neu auf Android-Entwicklung, und im Grunde neu web/mobile Lösungen.

So ist meine Frage - Was sind Best Practices bei der Organisation der Struktur der Android-Anwendung, die Daten vom Remote-Server erhalten?

Soll die Anfrage an den Server in eine Klasse gehen, die die Kommunikation mit dem Server durchführt (Anfragen abrufen und senden), oder sollte ich meine Anfragen als Datenquelle betrachten, was bedeutet, dass jede Datenklasse sie selbst verwaltet?

oder sollte ich mehr Ebenen der Abstraktion haben - eine Ebene für die Erfassung von Daten, andere für ein Modell, das einige Schnittstellen verwendet, ohne zu wissen, woher die Quelldaten stammen?

Ich bin gespannt, wie erfahrene Android-Entwickler auf diese Design-Fragen nähern ...

Antwort

9

Virgil Dobjanschi presentation eine gute Ressource ist, wie bereits erwähnt, Dies bedeutet im Wesentlichen, dass Sie Ihre Anfragen von einem Hintergrunddienst ausführen, damit die Aktivität nicht zerstört wird und Ihre Daten so früh wie möglich in der Datenbank gespeichert werden.

Weitere technische Details, wie ich es tue, ist die App in drei Komponenten aufzuteilen:

1- Bibliothek die Handhabung der HTTP-Anforderung und Antwort zu verkapseln (mit ApacheHTTP), die können einfach handhaben Anfrage/Antwort und erweiterte Funktionen, die Cookies enthalten können (können für die Anmeldung erforderlich sein) und den HTTP-Header modifizieren.

2- Marshal/Unmarsha-Schicht, wo ich die Serverdaten (z. B. XML oder JSON) analysieren und in Objekte (d. H. Modelle) konvertieren, mit denen der Rest meiner App umgehen wird.

3- Persistenzschicht.

Laut Dobjanschis Präsentation, ich normalerweise Datenanforderungen in einem Dienst nicht in einem Thread-Worker innerhalb der Aktivität ausführen.

+0

Das ist ein großartiges Video, danke! Jetzt versuche ich, es zu implementieren, speziell Muster B (activity-> contentProvider -> ServiceHelper -> Service -> Rest -> Prozessor), und jetzt habe ich schwer herauszufinden, wie dies getan werden sollte. Ich verstehe nicht, was Granularität dieses Dienstes ist, zum Beispiel, wenn ich meine Modellobjekte oder Datenbanktabelle namens User, UserDetails, Stadt, Kategorie usw. habe, sollte ich diese Klassen für alle "Datentypen" haben oder spezialisiert? – daneejela

+0

Zum Beispiel, sollte ich UserProcessor haben, CategoryProcessor (etc.), UserService, CategoryService (etc.) UserContentProvide, CategoryContentProvider (etc.)? – daneejela