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?

242voto

Pentium10 Punkte 198024

In Android gibt es zwar kein MVC, aber dafür Folgendes:

  • Sie definieren Ihre Benutzeroberfläche in verschiedenen XML-Dateien nach Auflösung, Hardware usw.
  • Sie definieren Ihre Ressourcen in verschiedenen XML-Dateien nach Gebietsschema, usw.
  • Sie erweitern Klasen wie ListActivity , TabActivity und verwenden Sie die XML-Datei durch Inflatoren .
  • Sie können so viele Klassen für Ihre Geschäftslogik erstellen, wie Sie möchten.
  • Eine Vielzahl von Werkzeuge sind bereits für Sie geschrieben worden - DatabaseUtils, Html.

235voto

Ramon Chan Punkte 2375

Es gibt kein allgemeingültiges MVC-Muster. MVC ist eher ein Konzept als ein solider Programmierrahmen. Sie können Ihr eigenes MVC auf jeder Plattform implementieren. Solange Sie sich an die folgende Grundidee halten, implementieren Sie MVC:

  • Modell: Was zu rendern ist
  • Ansicht: Wie man rendert
  • Controller: Ereignisse, Benutzereingaben

Betrachten Sie es auch so: Wenn Sie Ihr Modell programmieren, sollte sich das Modell nicht um das Rendering (oder plattformspezifischen Code) kümmern müssen. Das Modell würde zur Ansicht sagen: "Es ist mir egal, ob dein Rendering Android oder iOS oder Windows Phone ist, das ist, was ich brauche, um zu rendern. Die Ansicht würde nur den plattformspezifischen Rendering-Code behandeln.

Dies ist besonders nützlich, wenn Sie Mono das Modell gemeinsam zu nutzen, um plattformübergreifende Anwendungen zu entwickeln.

48voto

Derick Bailey Punkte 70483

Die Aktionen, Ansichten und Aktivitäten auf Android sind die eingebaute Art und Weise, mit der Android-Benutzeroberfläche zu arbeiten und sind eine Implementierung der Model-View-Viewmodel (MVVM) Muster die strukturell ähnlich (in der gleichen Familie wie) model-view-controller ist.

Meines Wissens gibt es keine Möglichkeit, aus diesem Modell auszubrechen. Es kann wahrscheinlich getan werden, aber Sie würden wahrscheinlich alle Vorteile des bestehenden Modells verlieren und müssen Ihre eigene UI-Schicht neu schreiben, damit es funktioniert.

31voto

18446744073709551615 Punkte 15274

Nach einigem Suchen ist die vernünftigste Antwort die folgende:

MVC ist in Android bereits implementiert als:

  1. Ansicht = Layout, Ressourcen und eingebaute Klassen wie Button abgeleitet von android.view.View .
  2. Controller = Aktivität
  3. Modell = die Klassen, die die Anwendungslogik implementieren

(Dies impliziert übrigens keine Anwendungslogik in der Aktivität).

Das Vernünftigste für einen kleinen Entwickler ist es, diesem Muster zu folgen und nicht zu versuchen, das zu tun, was Google beschlossen hat, nicht zu tun.

PS Beachten Sie, dass die Aktivität manchmal neu gestartet wird und daher kein Platz für Modelldaten ist (der einfachste Weg, einen Neustart auszulösen, ist das Weglassen von android:configChanges="keyboardHidden|orientation" aus dem XML und drehen Sie Ihr Gerät).

EDIT

Wir können über Folgendes sprechen MVC aber es wird so sein, dass FMVC , Rahmenwerk--Modell--Ansicht--Steuerung . Die Rahmenwerk (das Android-Betriebssystem) setzt seine Vorstellung vom Lebenszyklus von Komponenten und den damit verbundenen Ereignissen durch, und in der Praxis wird die Controller ( Activity / Service / BroadcastReceiver ) ist in erster Linie verantwortlich für die Bewältigung dieser Rahmenwerk -Ereignisse (wie onCreate() ). Sollten Benutzereingaben getrennt verarbeitet werden? Selbst wenn dies der Fall sein sollte, können Sie es nicht trennen, da die Benutzereingabe-Ereignisse auch von Android kommen.

Je weniger Code, der nicht Android-spezifisch ist, Sie in Ihre Activity / Service / BroadcastReceiver desto besser.

18voto

RoflcoptrException Punkte 50975

Es gibt kein einzelnes MVC-Muster, an das man sich halten könnte. MVC besagt nur mehr oder weniger, dass man Daten und Ansicht nicht vermischen sollte, so dass z.B. Ansichten für das Halten von Daten verantwortlich sind oder Klassen, die Daten verarbeiten, direkt auf die Ansicht einwirken.

Aber nichtsdestotrotz, so wie Android mit Klassen und Ressourcen umgeht, ist man manchmal sogar gezwungen, dem MVC-Muster zu folgen. Komplizierter sind meiner Meinung nach die Activities, die manchmal für die View verantwortlich sind, aber trotzdem gleichzeitig als Controller fungieren.

Wenn Sie Ihre Views und Layouts in den XML-Dateien definieren, Ihre Ressourcen aus dem res-Ordner laden und es mehr oder weniger vermeiden, diese Dinge in Ihrem Code zu vermischen, dann folgen Sie ohnehin einem MVC-Muster.

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