Ich weiß, dass diese Frage sehr alt ist, aber ich denke, dass es für andere nützlich sein kann, wie ich, die durch eine Suche darauf stolpern.
Ich arbeite jetzt seit 9 Monaten an Android von einem serverseitigen Hintergrund aus, wo vollständige Komponententests und geschichtete Architekturen üblich sind und gut funktionieren.
Durch viele Versuch und Irrtum und ich würde dringend empfehlen, die Model View Presenter
Muster, nicht Model View Controller.
Ein großes Problem, das ich gefunden habe ist, dass Activities
/Fragments
einen Lebenszyklus haben, der außerhalb Ihrer Kontrolle ist und zu unerwarteten Problemen führen kann.
Zum Beispiel möchte unsere Android-App im Querformat auf Tablets verwendet werden. Wir tun dies in OnCreateView()
oder OnCreate()
.
Auf einem Nexus 7 ist die Standardansicht Hochformat, was passiert ist, dass es die Aktivität im Hochformat startet, sagt unser Code dann zu Landschaft und Android schafft schließlich die activity
Klasse 3 Mal!
Wir haben Netzwerkanforderungen an onCreate
angeschlossen und sie werden in diesem Fall 3 mal passiert.
Sicher, können wir Logik hinzufügen, um nach doppelten Anrufen zu suchen, aber, meiner Meinung nach, wäre es besser, architektonisch zu versuchen, die UI von der Geschäftslogik zu trennen.
Meine Empfehlung wäre, das Fabrikmuster zu verwenden, um Referenten aus der Aktivität zu erstellen, aber sicherzustellen, dass die Fabrik immer nur die gleiche Instanz zurückgibt. Der Präsentator kann dann Logik enthalten, um eine Netzwerkanforderung auszuführen, nach Duplikaten zu suchen und zwischengespeicherte Ergebnisse und allgemeine Geschäftslogik zurückzugeben.
Wenn Ergebnisse aus dem Netzwerk Anruf zurückkehren, entweder Post an einen Bus wie Otto, die die Aktivität (Register für das Ereignis auf onResume()
und Deregistrierung bei onPause()
) registriert hat, oder sicherstellen, dass die Callback-Schnittstelle durch die Aktivität umgesetzt wurde auf die letzte Aktivität im Moderator aktualisiert.
Auf diese Weise Code in der presenter
nach unten ist Einheit testbar und nicht auf flockigen UI-Layer-Tests angewiesen.
Sie beantworten seine Frage nicht.Sie haben über die Architektur der Benutzerschnittstelle geantwortet. Ich denke, seine Frage ist mehr über die globale Anwendungsarchitektur: sollten wir separate Ebenen wie Präsentation (= MVC), Geschäftslogik und Datenpersistenz erstellen. Dieses Muster ist in Webanwendungen sehr verbreitet. – clemp6r
Vereinbart mit @ clemp6r. –