517 Stimmen

MVC-Muster auf Android

Ist es möglich, das Model-View-Controller-Muster in Java für Android zu implementieren?

Oder ist sie bereits durch Aktivitäten umgesetzt? Oder gibt es eine bessere Möglichkeit, das MVC-Muster für Android zu implementieren?

9voto

Mahendra Liya Punkte 11992

Obwohl dieser Beitrag alt zu sein scheint, möchte ich die folgenden beiden hinzufügen, um über die jüngsten Entwicklungen in diesem Bereich für Android zu informieren:

Android-Bindung - Bereitstellung eines Frameworks, das die Bindung von Android-View-Widgets an das Datenmodell ermöglicht. Es hilft bei der Implementierung von MVC- oder MVVM-Mustern in Android-Anwendungen.

roboguice - RoboGuice nimmt der Entwicklung das Rätselraten ab. Injizieren Sie Ihre Ansicht, Ihre Ressource, Ihren Systemdienst oder ein beliebiges anderes Objekt und lassen Sie RoboGuice sich um die Details kümmern.

9voto

Devrath Punkte 39521

Model-View-Controller (MVC)

enter image description here


Beschreibung:

  • Wenn wir große Projekte in der Softwareentwicklung durchführen müssen, ist MVC im Allgemeinen verwendet, weil es eine universelle Art der Organisation der Projekte ist.
  • Neue Entwickler können sich schnell in das Projekt einarbeiten
  • Hilft bei der Entwicklung von großen Projekten und auch plattformübergreifend.

Das MVC-Muster sieht im Wesentlichen so aus:

  • Modell: Was angezeigt werden soll. Dies kann die Datenquelle sein (z.B.: Server, Rohdaten Daten in der App)
  • Ansicht: Wie es angezeigt wird. Dies kann die xml sein. Sie fungiert also als Präsentationsfilter. Eine Ansicht ist mit ihrem Modell (oder Modellteil) verbunden und erhält die für die Darstellung erforderlichen Daten.
  • Controller: Behandlung von Ereignissen wie Benutzereingaben. Dies ist die Aktivität

Ein wichtiges Merkmal von MVC: Wir können entweder das Modell oder die Ansicht oder den Controller ändern, ohne dass die anderen davon betroffen sind.

  • Angenommen, wir ändern die Farbe in der Ansicht, die Größe der Ansicht oder die Position der Ansicht. Dies hat keine Auswirkungen auf das Modell oder den Controller.
  • Angenommen, wir ändern das Modell (statt der vom Server geholten Daten Daten aus den Assets abrufen), hat das keine Auswirkungen auf die Ansicht und Controller
  • Angenommen, wir ändern den Controller (Logik in der Aktivität), dann hat das keine Auswirkungen auf das Modell und die Ansicht

9voto

Ben Punkte 983

Das MVC-Muster von Android wird (irgendwie) mit der Adapter Klassen. Sie ersetzen einen Controller durch einen "Adapter". In der Beschreibung für den Adapter heißt es:

Ein Adapter Objekt fungiert als Brücke zwischen einer AdapterView und dem zugrundeliegenden Daten für diese Ansicht.

Ich untersuche dies gerade für eine Android-Anwendung, die aus einer Datenbank liest, daher weiß ich noch nicht, wie gut es funktioniert. Allerdings scheint es ein wenig wie Qt's Model-View-Delegate Architektur, die sie behaupten, ist ein Schritt nach oben von einem traditionellen MVC-Muster. Zumindest auf dem PC funktioniert das Muster von Qt recht gut.

8voto

Ali Nem Punkte 4656

Es war überraschend zu sehen, dass keiner der Beiträge hier eine Antwort auf die Frage gab. Sie sind entweder zu allgemein, vage, falsch oder gehen nicht auf die Implementierung in Android ein.

In MVC ist die Siehe Schicht kann nur die Benutzeroberfläche (UI) anzeigen. Wenn dafür Daten benötigt werden, erhält sie diese von der Modell Ebene. Aber die Ansicht fragt NICHT direkt das Modell, um die Daten zu finden, sondern tut dies über die Controller . Also die Controller  ruft das Modell um die erforderlichen Daten für die Siehe . Sobald die Daten fertig sind, wird die Controller informiert die Siehe dass die Daten bereit sind für die Erfassung aus dem Modell . Jetzt ist die Siehe kann die Daten aus dem Modell .

Dieser Fluss lässt sich wie folgt zusammenfassen:

enter image description here

Es ist erwähnenswert, dass die Siehe kann über die Verfügbarkeit der Daten im  Modell  entweder durch Controller -- auch bekannt als  Passiv MVC -- oder durch Beobachtung der Daten in der Modell durch die Registrierung von Observablen, die MVC aktiv .

Was die Implementierung betrifft, so stellt sich als erstes die Frage, welche Android-Komponente für die Siehe ? Activity   oder Fragment  ?

Die Antwort ist, dass es keine Rolle spielt und beide verwendet werden können. Die Siehe sollte in der Lage sein, die Benutzeroberfläche (UI) auf dem Gerät darzustellen und auf die Interaktion des Benutzers mit der UI zu reagieren. Sowohl Activity   y Fragment   stellen die dafür erforderlichen Methoden zur Verfügung.

In der Beispielanwendung, die in dieser Artikel Ich habe verwendet Activity  für die Siehe Schicht, sondern Fragment   kann ebenfalls verwendet werden.

Die vollständige Beispielanwendung finden Sie im 'mvc'-Zweig meines GitHub-Repos これ .

Ich habe mich auch mit den Vor- und Nachteilen der MVC-Architektur in Android anhand eines Beispiels beschäftigt これ .

Für Interessierte habe ich eine Reihe von Artikeln über die Architektur von Android-Anwendungen begonnen これ in dem ich die verschiedenen Architekturen, d.h. MVC, MVP, MVVM, für die Entwicklung von Android-Apps anhand einer vollständig funktionierenden App vergleiche.

6voto

Edmund Chang Punkte 257

Ich denke, die nützlichste vereinfachte Erklärung finden Sie hier: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

Nach allem, was ich hier gesehen und gelesen habe, macht die Implementierung all dieser Dinge die Sache schwieriger und passt nicht gut zu anderen Teilen von Android.

Dass eine Aktivität andere Zuhörer implementiert, ist bereits der Standard bei Android. Der harmloseste Weg wäre, den Java Observer hinzuzufügen, wie in den Folien beschrieben, und die onClick- und andere Arten von Aktionen in Funktionen zu gruppieren, die immer noch in der Activity sind.

Bei Android ist es so, dass die Aktivität beides tut. Der Kampf dagegen macht das Erweitern oder zukünftige Codieren nicht wirklich einfacher.

Ich stimme zu mit die 2. Stelle . Es ist irgendwie schon implementiert, nur nicht so, wie es die Leute gewohnt sind. Unabhängig davon, ob es sich um dieselbe Datei handelt oder nicht, gibt es bereits eine Trennung. Es besteht keine Notwendigkeit, eine zusätzliche Trennung zu schaffen, um sie an andere Sprachen und Betriebssysteme anzupassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X