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?
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?
In Android hast du kein MVC, aber du hast folgendes:
@JDPekham, warum sagen Sie "Sie können keine Aktivität instanziieren, ohne mit Ihrem Layout/View zu sprechen"? Das Instanziieren einer Aktivität erfordert tatsächlich nicht, mit Ansichten zu sprechen, das Sprechen mit Ansichten ist keineswegs Teil der Aktivitätsinstanziierung. Sie KÖNNEN (müssen es aber nicht) verschiedene Aktivitätsmethoden aufrufen, die mit Ihren Ansichten interagieren, wenn und falls Sie dies für angemessen halten. Zweite Frage: Angenommen, die Aktivität soll die "Controller"-Rolle übernehmen (ich glaube, viele Android-Entwickler sehen das so), warum dann nicht mit Ihren Ansichten von der Aktivität aus sprechen?
Für alle, die sagen, dass "Android MVC ist", probieren Sie bitte Backbone.js (ja, clientseitiges js) für eine Woche aus und sagen Sie dann, dass "Android MVC ist". Dann werden Sie endlich die Frage verstehen und wissen, warum wir immer wieder fragen :)
"In Android hast du kein MVC" ???? In Android hast du, wie in anderen Sprachen, MVC, wenn du MVC haben möchtest.
Es gibt kein universell einzigartiges MVC-Muster. MVC ist eher ein Konzept als ein festes Programmierungs-Framework. Sie können Ihr eigenes MVC auf jeder Plattform implementieren. Solange Sie sich an die folgende Grundidee halten, implementieren Sie MVC:
Denken Sie auch auf diese Weise darüber nach: Wenn Sie Ihr Modell programmieren, sollte sich das Modell nicht um die Darstellung (oder plattformspezifischen Code) kümmern müssen. Das Modell würde zur Ansicht sagen: Es ist mir egal, ob deine Darstellung Android oder iOS oder Windows Phone ist, dies ist was ich brauche, dass du es renderst. Die Ansicht würde lediglich den plattformspezifischen Rendering-Code behandeln.
Dies ist besonders nützlich, wenn Sie Mono verwenden, um das Modell gemeinsam zu nutzen, um plattformübergreifende Anwendungen zu entwickeln.
@ TWiStErRob Aber Design Patterns sind theoretische, abstrakte Ideen, die nicht nur eine Möglichkeit haben, sie umzusetzen. Die Aussage "Ich möchte MVC nicht theoretisch verstehen, ich möchte es einfach implementiert haben" klingt für mich so, als könnte es dazu führen, dass "ich eine Waschmaschine in meine Küche stelle, weil Waschmaschinen das Cleaner™-Muster implementieren und Küchen das brauchen".
Ich denke, Beispiele sind unschätzbar, weil sie zeigen, auf was andere Leute gekommen sind. Man kann sich verbessern und von ihren Bemühungen lernen. Es ist nicht notwendig, dass jeder das Rad neu erfindet. Im Zusammenhang mit Android und seinem komplexen Lebenszyklus gibt es Probleme, die in einem Designmuster nicht angesprochen werden, aber mit denen sich jeder auseinandersetzen wird. Das meine ich mit praktisch.
Die Aktionen, Ansichten und Aktivitäten auf Android sind die eingebaute Arbeitsweise mit der Android-Benutzeroberfläche und sind eine Implementierung des Model-View-ViewModel (MVVM) Designmusters, das strukturell ähnlich ist (in der gleichen Familie wie) Model-View-Controller.
Soweit ich weiß, gibt es keinen Weg, dieses Modell zu durchbrechen. Es könnte wahrscheinlich gemacht werden, aber Sie würden wahrscheinlich alle Vorteile verlieren, die das vorhandene Modell hat, und Ihre eigene UI-Schicht neu schreiben müssen, um es zum Funktionieren zu bringen.
Nach einiger Suche lautet die vernünftigste Antwort wie folgt:
MVC ist bereits in Android implementiert als:
Button
, abgeleitet von android.view.View
.(Dies impliziert übrigens keine Anwendungsdomänenlogik in der Aktivität.)
Das Vernünftigste für einen kleinen Entwickler ist, 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, daher ist es kein Ort für Modell-Daten (der einfachste Weg, einen Neustart zu verursachen, besteht darin, android:configChanges="keyboardHidden|orientation"
aus dem XML zu entfernen und Ihr Gerät zu drehen).
BEARBEITEN
Wir sprechen vielleicht über MVC, aber es wird sozusagen FMVC, Framework--Model--View--Controller sein. Das Framework (das Android-Betriebssystem) setzt seine Vorstellung vom Lebenszyklus der Komponenten und den damit verbundenen Ereignissen durch, und in der Praxis ist der Controller (Activity
/Service
/BroadcastReceiver
) in erster Linie dafür verantwortlich, mit diesen durch das Framework auferlegten Ereignissen umzugehen (wie z.B. onCreate()). Sollte Benutzereingabe separat verarbeitet werden? Selbst wenn sie sollte, können Sie sie nicht trennen, Benutzereingabeereignisse kommen auch von Android.
In jedem Fall ist es besser, so wenig nicht auf Android-spezifischen Code wie möglich in Ihre Activity
/Service
/BroadcastReceiver
zu setzen.
Die Aktivität hat direkten Zugriff auf die Benutzeroberfläche, während im MVC der Controller nicht über die Ansicht Bescheid wissen sollte (nur umgekehrt).
@KonradMorawski Hmmm.... Ein View, der darüber Bescheid weiß, wie Dinge angezeigt werden, und über den Controller? Ein Kind von beispielsweise Button
, das über den Controller Bescheid weiß? Es scheint logischer zu sein, dass Views nur darüber Bescheid wissen, wie Dinge angezeigt werden. Und wenn man bedenkt, dass das Model nur über die Art der Daten Bescheid weiß, ist deshalb ein Controller erforderlich: Etwas muss sowohl über das Model als auch über den View Bescheid wissen.
Offensichtlich muss die Ansicht über den Controller informiert sein, um Ereignisse an den Controller delegieren zu können. Der Controller verfolgt den Weg zum Modell und informiert die Ansicht über die Ergebnisse (damit sie sie anzeigen kann). Der Controller bläht die Ansicht nicht auf (im Gegensatz zur Aktivität), noch sollte er über Buttons, Textfelder, Listen usw. Bescheid wissen (im Gegensatz zu Aktivitäten).
Es gibt kein einzelnes MVC-Muster, dem man folgen könnte. MVC besagt lediglich mehr oder weniger, dass Daten und Ansicht nicht vermischt werden sollten, sodass z.B. Ansichten dafür verantwortlich sind, Daten zu halten oder Klassen, die Daten verarbeiten, direkten Einfluss auf die Ansicht haben.
Aber dennoch ist es so, dass die Art und Weise, wie Android mit Klassen und Ressourcen umgeht, dich manchmal sogar dazu zwingt, dem MVC-Muster zu folgen. Meiner Meinung nach sind die Aktivitäten, die manchmal für die Ansicht verantwortlich sind, aber gleichzeitig als Controller fungieren, noch komplizierter.
Wenn du deine Ansichten und Layouts in den XML-Dateien definierst, deine Ressourcen aus dem res-Ordner lädst und mehr oder weniger vermeidest, diese Dinge in deinem Code zu vermischen, dann folgst du ohnehin einem MVC-Muster.
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.
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?
3 Stimmen
@Dori , Ich habe deinen Link repariert: Android Architecture: MV?
0 Stimmen
Dieser Artikel entspricht genau dem, wonach Sie suchen, MVC in Android anhand eines praktischen Beispiels: digigene.com/architecture/android-architecture-part-2-mvc
0 Stimmen
Die Entwicklung von Android-Apps ähnelt fast dem MVC-Modell, wenn man mit Android Studio arbeitet.