Schwierigkeiten bei der Implementierung von Model-View-Presenter in Android

Model-View-Presenter (MVP) ist ein bekanntes Design-Muster für GUI-Anwendungen. Für Android, die Implementierung der Geschäftslogik in einem einfachen Java-Modul erleichtert das Testen ohne einen Android-Emulator zu erfordern.

Allerdings habe ich Schwierigkeiten bei der Umsetzung der Muster auf Android wegen der besonderen Anforderungen an die GUI von Android-Anwendungen:

  • Richtig behandeln DrawerLayout Animation beim Navigieren durch Fragment
  • Android: Wie kann ich die AlertDialog-Breite und -Ebene und die Schaltfläche des AlertDialog-Stils einstellen?
  • Firebase Push Notification - Wie zeigt man eine Multiline-Nachricht in der Benachrichtigung an
  • Was ist die Log-API, um von einem Android-JNI-Programm aufzurufen?
  • Android-SDK-Paket Installationsfehler obwohl Eclipse & SDK Manager als Administrator auf Vista ausgeführt werden
  • Wie man den Abstand zwischen Absätzen in einer Textansicht erhöht
    • Eine Aktivität kann an jedem beliebigen Punkt zerstört werden (eingehender Anruf, Benutzer drückt die Home-Taste, …), und wenn es neu erstellt wird, sollte es in dem exakt gleichen Zustand sein, als wenn es übrig war. Dies ist im Gegensatz zu den meisten anderen GUI-Anwendungen.

    • Eine Aktivität kann durch viele Lebenszykluszustände gehen. Es kann pausiert werden, in welchem ​​Fall die Benutzeroberfläche der Aktivität nicht geändert werden sollte. Wenn zum Beispiel einige Daten im Hintergrund geladen werden, kann es nicht an den View-Teil von MVP (Activity) ausgeliefert werden, wenn es sich in einem Pause-Zustand befindet. Auch dies ist eine ungewöhnliche Voraussetzung.

    Ich habe den Blog Post MVP für Android gelesen und sah den Beispiel Quellcode . Das Endziel, das ich mit dem MVP-Muster zu erreichen versuche, ist es möglich, alle Geschäftslogik mit dem transpiler j2objc auf Objective-C zu übersetzen, so dass die Geschäftslogik bei der Implementierung der gleichen App auf iOS wiederverwendet werden kann.

    Gibt es jemanden, der das MVP-Muster für Android erfolgreich implementiert hat und in diesem Fall was fehlt mir?

  • Bitbucket - Push-Projektdateien in ein leeres Git-Repository
  • Wie man einen benutzerdefinierten Keystore für das Debugging in Eclipse für Android
  • Rekursiver Eintrag zum AusführenPendingTransactions
  • Wie man einen Onclick-Listener für eine Imagebutton in einem Alertdialog setzt
  • Referenzstring-Ressource aus Code
  • Unterschied zwischen singleTask und singleInstance
  • 2 Solutions collect form web for “Schwierigkeiten bei der Implementierung von Model-View-Presenter in Android”

    Ich schlage vor, die MVP-Komponente zu implementieren, ohne Aktivität einzubeziehen, vielleicht konzeptionell darüber nachzudenken, was für Android und GWT nützlich wäre. Erstellen Sie die Komponente mit der Test-driven-Entwicklung mit einer verspotten View-Schnittstelle und fügen Sie Tests hinzu, bis die Geschäftslogik vollständig implementiert und überprüft wird. TDD hilft, die API der Komponente schlecht zu halten (warum schreibe Tests für Sachen, die du nicht brauchst?), Was das Portieren der Komponente erleichtert.

    Die Aktivitätsanforderungen, die Sie beschreiben, können verallgemeinert werden, um plattformunabhängig zu sein: Die Komponente sollte serialisierbar sein (Small 's', nicht speziell Java Serialisierung) und muss Lebenszykluszustandsereignisse akzeptieren. Auch diese können mit Mocks für Systemmerkmale vollständig getestet werden. Wenn du diesen Schritt durchmachst, wirst du wahrscheinlich bemerken, dass einige der Aktivitätsanforderungen notwendigerweise Android-spezifisch sind und auf anderen Plattformen nützlich sein können. Vermeiden Sie es, riesige Service-APIs zu erstellen. Um Serialisierung zu unterstützen, zum Beispiel, alles, was benötigt wird, sind Speicher / Last-Methoden, nicht so etwas wie die Paket-API . Ich habe gefunden, solche Service-APIs zu einem anderen Entwickler auf einem Whiteboard zu beschreiben, um eine großartige Möglichkeit zu sein, unnötige Flusen zu finden.

    Als nächstes Port die Komponente auf Android, vielleicht durch die Schaffung einer Aktivität, die delegiert auf die Komponente und bietet Android-spezifische Implementierung Klassen für die verspotten Schnittstellen. Es sollte alles "nur funktionieren" das erste Mal, aber in Wirklichkeit, einige Anforderungen möglicherweise verpasst worden, so fügen Sie sie auf die Plattform-unabhängige Teil und wiederholen.

    Wenn du bereit bist, auf iOS zu portieren, reimplement die vorher verspottenden Schnittstellen. Wenn diese Schnittstellen mager sind, wird es wahrscheinlich einfacher sein, sie direkt in Objective-C zu erstellen und die von j2objc erzeugten Protokoll-Header zu importieren. Zum Beispiel implementiert die NSDictionaryMap- Klasse von j2objc java.util.Map mit einer NSDictionary-Implementierung – keine Notwendigkeit, eine Java-Version zu schreiben und zu übersetzen, da sie nur iOS-APIs verwendet.

    Ich finde, dass die MVP-Variante Android gebaut ist ein Schritt in die richtige Richtung für die Isolierung der Business-Logik in einer App. Allerdings, wenn Sie eine bessere Trennung von Bedenken und damit mehr wiederverwendbare Domain / Business Logik erreichen wollen, empfehle ich das Presenter First Pattern (das Sie sich kurz in der Kommentierung erwähnen). Abgesehen von abnehmender Kopplung eignet es sich gut für TDD und ermöglicht es Ihnen, Unit-Test alle Ihre Geschäftslogik.

    Ich habe vor kurzem ein GitHub Repo mit Presenter Erste Beispiele für Android gestartet. Aufgrund der Komplexität der Android-Architektur ist es nicht einfach, das Muster zu implementieren. Die Ansichten sind in der Regel "fetter", als das, was in einer normalen Presenter First App akzeptabel zu sein scheint, vor allem wegen der Aktivität Lebenszyklus und andere Eigenheiten, wie Sie sich selbst erwähnen. Ich habe mein Bestes getan, um die Geschäftslogik von der Plattform zu entkoppeln, aber es gibt definitiv Raum für Verbesserungen. Die Beispiele finden Sie unter:

    http://github.com/olerass/presenter-first-android

    Vielleicht können Sie dort einige Ideen nutzen? Oder noch besser dazu beitragen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.