517 Stimmen

MVC-Muster auf Android

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

Oder ist es bereits durch Aktivitäten implementiert? Oder gibt es einen besseren Weg, das MVC-Muster für Android zu implementieren?

64 Stimmen

Deine Frage ist sehr gut. Aber die als Lösung markierte Antwort ist meiner Meinung nach nicht korrekt. Sie könnte mehrere Personen in die Irre führen.

4 Stimmen

Überprüfe meine 2 Beiträge hier Android-Architektur: MV?

1 Stimmen

Auch gibt es zusätzliche Regeln, die beachtet werden müssen, um sich an das MVC-Modell zu halten, oder ist die Android-Entwicklung aufgrund von Aktivität, XML und Ressourcen bereits auf MVC zugeschnitten?

9voto

Mahendra Liya Punkte 11992

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

android-binding - Bietet ein Framework, das das Binden von Android-View-Widgets an Datenmodelle ermöglicht. Es hilft bei der Implementierung von MVC- oder MVVM-Mustern in Android-Anwendungen.

roboguice - RoboGuice nimmt Ihnen das Rätselraten bei der Entwicklung ab. Injizieren Sie Ihre Ansicht, Ressource, Systemdienst oder jedes andere Objekt und lassen Sie RoboGuice die Details übernehmen.

9voto

Devrath Punkte 39521

Model View Controller (MVC)

enter image description here


Beschreibung:

  • Wenn wir große Projekte in der Softwareentwicklung haben, wird in der Regel MVC verwendet, da es eine universelle Methode zur Organisation der Projekte ist.
  • Neue Entwickler können sich schnell an das Projekt anpassen
  • Hilft bei der Entwicklung großer Projekte und ist auch plattformübergreifend.

Das MVC-Muster ist im Wesentlichen folgendes:

  • Modell: Was angezeigt werden soll. Dies kann die Datenquelle sein (z. B. Server, Rohdaten in der App)
  • Ansicht: Wie es angezeigt wird. Dies kann das XML sein. Es fungiert somit als Präsentationsfilter. Eine Ansicht ist an ihr Modell (oder Modellteil) angehängt und erhält die für die Präsentation erforderlichen Daten.
  • Controller: Behandlung von Ereignissen wie Benutzereingaben. Dies kann die Aktivität sein

Wichtige Funktion des MVC: Wir können entweder das Modell oder die Ansicht oder den Controller ändern, ohne die anderen zu beeinträchtigen

  • Sagen wir, wir ändern die Farbe in der Ansicht, die Größe der Ansicht oder die Position der Ansicht. Dadurch beeinflusst es weder das Modell noch den Controller
  • Sagen wir, wir ändern das Modell (anstatt Daten vom Server abzurufen, Daten aus den Assets abrufen), es beeinflusst immer noch nicht die Ansicht und den Controller
  • Sagen wir, wir ändern den Controller (Logik in der Aktivität), es beeinflusst weder das Modell noch die Ansicht

2 Stimmen

Ich habe den Controller bisher nur als Vermittler für die Übermittlung von Informationen zwischen Ansicht und Modell verwendet. Ich frage mich, wie du Modell und Ansicht direkt miteinander in Kontakt hast. Hast du eine Quelle oder ein Beispiel für diese Implementierung?

9voto

Ben Punkte 983

Das MVC-Muster von Android wird (zum Teil) mit ihren Adapter-Klassen implementiert. Sie ersetzen einen Controller durch einen "Adapter". Die Beschreibung für den Adapter lautet:

Ein Adapterobjekt dient als Brücke zwischen einer AdapterView und den zugrunde liegenden Daten für diese Ansicht.

Ich beschäftige mich gerade mit einer Android-Anwendung, die Daten aus einer Datenbank liest. Daher weiß ich noch nicht, wie gut es funktioniert. Es scheint jedoch ein wenig wie die Model-View-Delegate-Architektur von Qt zu sein, von der behauptet wird, dass sie einen Schritt weiter als das traditionelle MVC-Muster ist. Zumindest auf dem PC funktioniert das Muster von Qt ziemlich gut.

8voto

Ali Nem Punkte 4656

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

In MVC weiß die View-Schicht nur, wie sie die Benutzeroberfläche (UI) anzeigen soll. Wenn Daten benötigt werden, werden sie aus der Model-Schicht abgerufen. Die View fragt jedoch NICHT direkt beim Model nach den Daten, sondern über den Controller. Der Controller ruft also das Model auf, um die erforderlichen Daten für die View bereitzustellen. Sobald die Daten bereit sind, informiert der Controller die View, dass die Daten aus dem Model abgerufen werden können. Jetzt kann die View die Daten aus dem Model erhalten.

Dieser Ablauf kann wie folgt zusammengefasst werden:

Hier Bildbeschreibung eingeben

Es sei darauf hingewiesen, dass die View über die Verfügbarkeit der Daten im Model entweder durch den Controller -- auch bekannt als Passive MVC -- oder durch Beobachten der Daten im Model durch Registrierung von Beobachtern informiert werden kann, was Active MVC genannt wird.

Was die Implementierung betrifft, liegt eine der ersten Fragen auf der Hand: Welches Android-Komponent sollte für die View verwendet werden? Activity oder Fragment?

Die Antwort ist, dass es keine Rolle spielt und beide verwendet werden können. Die View 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 als auch Fragment stellen die erforderlichen Methoden dafür bereit.

In der Beispiel-App, die in diesem Artikel verwendet wurde, habe ich Activity für die View-Schicht verwendet, aber auch Fragment kann genutzt werden.

Die vollständige Beispiel-App finden Sie im 'mvc'-Zweig meines GitHub-Repositorys hier.

Ich habe auch die Vor- und Nachteile der MVC-Architektur in Android anhand eines Beispiels in diesem Artikel behandelt.

Für Interessierte habe ich eine Artikelserie zur Android-App-Architektur gestartet, die hier beginnt und in der ich die verschiedenen Architekturen wie MVC, MVP, MVVM für die Entwicklung von Android-Apps anhand einer voll funktionsfähigen App vergleiche.

0 Stimmen

Ich habe einen Architekturkurs besucht, in dem der Dozent behauptet hat, dass Activities und Fragments nicht als Ansichten verwendet werden sollten und tatsächlich Controller sein sollten und Ansichten separate Dateien sein sollten. Haben Sie eine Meinung oder einen Grund, warum das nicht der Fall sein sollte?

0 Stimmen

Ich glaube nicht, dass der Dozent damit genau liegt. Die Auswahl der Aktivität oder des Fragments als Controller bedeutet, dass der Kontext an den Controller übergeben wird. Auf der anderen Seite benötigt die Ansicht auch einen Kontext zum Zeichnen auf dem Bildschirm. Auf diese Weise, d.h. den Kontext an den Controller zu übergeben, wird die App anfällig für Speicherlecks, und ich glaube, der Controller sollte keinen Zustand tragen.

6voto

Edmund Chang Punkte 257

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

Alles andere, was ich hier gesehen und gelesen habe, zeigt, dass die Implementierung all dieser Dinge schwieriger macht und nicht gut zu anderen Teilen von Android passt.

Es ist bereits der Standardweg in Android, dass eine Aktivität andere Listener implementiert. Der harmloseste Weg wäre, den Java Observer hinzuzufügen, wie es in den Folien beschrieben ist, und die onClick und andere Arten von Aktionen in Funktionen zu gruppieren, die immer noch in der Aktivität sind.

Der Android-Weg ist, dass die Aktivität beides tut. Sich dagegen zu wehren, macht es nicht wirklich einfacher, die Erweiterung oder zukünftige Kodierung durchzuführen.

Ich stimme mit dem 2. Beitrag überein. Es ist irgendwie schon implementiert, nur nicht auf die Art und Weise, wie die Leute es gewohnt sind. Ob es sich im gleichen Datei befindet oder nicht, gibt es bereits eine Trennung. Es ist nicht nötig, zusätzliche Trennung zu schaffen, um es in andere Sprachen und Betriebssysteme einzufügen.

7 Stimmen

Der Link, den Sie angegeben haben, ist defekt.

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