So trennen Sie View und Presenter in Android, während die Reaktionen auf die Benutzeraktionen (Presenter-Teil von MVP) in denselben Aktivitäten festgelegt werden, in denen GUI-Elemente angezeigt werden (View-Teil von MVP).
"In Model View Presenter, wie Martin Fowler oder Michael Feathers [2] sagen, ist die Logik der Benutzeroberfläche in eine Klasse namens Presenter unterteilt, die alle Eingaben des Benutzers verarbeitet und der" dummen "Ansicht mitteilt, was und wann zu tun ist Anzeige "(zitiert von hier ).
Bis jetzt dachte ich, dass eine der Hauptfunktionen von Android die intelligente Aktivität ist, die Aktionen ausführt, auf diese reagiert und die Ergebnisse anzeigt. Steht das MVP-Schema im Widerspruch zur Android-Philosophie? Hat es Sinn zu versuchen, es auf Android zu realisieren? Wenn ja, wie könnte das geschehen?
programmers
den Fragen sind kontroverse Frage "Was denkst du über ../ist es gut oder schlecht zu ...", währendstackoverflow
eher wie "Gibt es Beispiele für MVP in Android" sein würde. Für mich sind beide Orte ok.Antworten:
Android-Anwendungen basieren im Wesentlichen auf Model-View-Controller (MVC) - MVP klingt genauso, obwohl ich den Begriff vorher noch nicht gehört habe. Aktivitäten die Rolle des Controllers zu füllen, sind XML - Ansichten nur , dass (obwohl Sie können sie programmatisch in der Aktivität bauen - es ist einfach leichter und einfacher es in XML zu tun), und das Modell Sie selbst schreiben. Also ja, dieses Modell ist ziemlich praktisch.
Ein möglicher Grund, warum Sie nicht viel über dieses Designmodell gehört haben, ist, dass das Android-Framework Sie dazu zwingt, die Ansicht zu trennen. Da die Anwendung auf Mobilgeräten in der Regel klein ist, wird Full-On-MVC in der Regel nicht verwendet. Sie tendieren zu Ansichts- und Aktionsebenen, in denen die Aktionsebene einen Großteil der (kleinen) Arbeit des Modells erledigt.
Wenn Sie eine plattformübergreifende App schreiben, sollten Sie sich einen Ansatz mit vier Ebenen ansehen: Ansicht, Aktion, Geschäftslogik und Modell. Die Ebenen "Ansicht" und "Aktion" sind plattformspezifisch, während sich die Geschäftslogik und das Geschäftsmodell nicht ändern. Grundsätzlich teilen Sie die Präsentator- und Benutzerinteraktion auf die Aktionsebene auf, die die Business Logic-Ebene aufruft, um die vom Benutzer gewünschte Aktion auszuführen.
quelle
Action
(= Presentation) Layer-Plattform auch unabhängig zu halten - zumindest, wenn Ihre verschiedenen Plattformen ähnliche UI-Funktionen bieten.Ich habe keine Erfahrung mit Android-Programmierung, sehe aber keinen Grund, warum MVP weniger nützlich sein sollte als in jedem anderen ereignisgesteuerten Framework. Die
Activity
Klasse unterscheidet sich nicht wesentlich von derDialog
oderForm
in anderen Frameworks. Daher sollte es einfach sein, eine "Activitity Presenter" -Klasse für jede Activity-Unterklasse Ihrer Anwendung zu erstellen und die Kernlogik dort abzulegen.An Ihre "Aktivität" gesendete Ereignisse müssen an Ihren Moderator delegiert werden. Wenn Ihr Moderator Ereignisse selbst senden oder andere systemabhängige Funktionen aufrufen möchte, muss Ihre Aktivität über die Schnittstelle, die er mit dem Moderator teilt, verwandte Funktionen bereitstellen. Aber das ist im Grunde das gleiche wie in jedem anderen GUI-Framework, das ich kenne.
quelle
MVP ist definitiv nützlich für Android. Es hilft, Ihren Code zu organisieren und zu testen. Und das Beste daran ist, dass neue Leute, die Ihren Code lesen, den Code verstehen und Beiträge leisten können, sobald sie wissen, was wohin soll. Hier ist ein sehr hilfreicher Link, um MVP anhand von Beispielen zu verstehen .
Hier finden Sie eine kurze Erläuterung aller drei Komponenten von MVP
Aussicht
In Android MVP enthält eine Ansicht zwei Dinge: Aktivität - Android-Ressource Ansicht - Java-Oberfläche Aktivität Implementiert die Ansicht und injiziert sich selbst (Ansichtsoberfläche) in den Präsentator, sodass der Präsentator über die Ansichtsoberfläche mit der Aktivität kommunizieren kann. Die ersten drei Blöcke des Diagramms zeigen die Kommunikation zwischen View und The Presenter.
Moderator
Presenter fungiert als mittlere Ebene zwischen Ansicht und Daten / Modell. View (Activity) befiehlt dem Präsentator, etwas zu präsentieren, und der Präsentator entnimmt dann Daten aus der Datenbank / dem Modell und gibt die präsentierbare Form von Daten an View zurück. View sorgt dann dafür, dass diese Daten auf dem Bildschirm angezeigt werden. Und denken Sie daran, dass Presenter eine einfache Java-Klasse ist, die keine der Android-Komponenten enthalten sollte, da dies sonst den Unit-Test des Presenters erschwert.
Wenn Sie die Datenbank im Presenter verwenden möchten, legen Sie in der Aktivität eine Datenbankinstanz an und fügen Sie sie in den Presenter ein. Auf diese Weise können Sie die Datenbank während des Unit-Tests verspotten und die Geschäftslogik testen.
Modell
Modell in MVP ist nichts anderes als Ihre Datenquelle. View kommuniziert nicht direkt mit Daten, sondern befiehlt Presenter, Daten dafür zu verarbeiten und die Informationen zurückzugeben, die ohne weitere Änderungen angezeigt werden können.
quelle