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?
Ich war es leid, das MVx-Desaster auf Android zu haben, daher habe ich kürzlich eine winzige Bibliothek erstellt, die einen unidirektionalen Datenfluss bietet und dem Konzept von MVC ähnelt: https://github.com/zserge/anvil
Im Grunde haben Sie eine Komponente (Aktivität, Fragment und ViewGroup). Darin definieren Sie die Struktur und den Stil der Ansichtsebene. Außerdem definieren Sie, wie Daten an die Ansichten gebunden werden sollen. Schließlich können Sie auch Listener an derselben Stelle binden.
Dann, wenn Ihre Daten geändert werden, wird die globale Methode "render()" aufgerufen, und Ihre Ansichten werden intelligent mit den aktuellsten Daten aktualisiert.
Hier ist ein Beispiel für die Komponente, bei der alles für die Kompaktheit des Codes enthalten ist (natürlich können Model und Controller leicht getrennt werden). Hier ist "count" ein Modell, die view()-Methode ist eine Ansicht, und "v -> count++" ist ein Controller, der auf die Klicks der Schaltfläche hört und das Modell aktualisiert.
public MyView extends RenderableView {
public MyView(Context c) {
super(c);
}
private int count = 0;
public void view() {
frameLayout(() -> { // Definieren Sie Ihre Ansichtshierarchie
size(FILL, WRAP);
button(() -> {
textColor(Color.RED); // Definieren Sie den Ansichtsstil
text("Geklickt " + count); // Daten binden
onClick(v -> count++); // Listener binden
});
});
}
Mit dem getrennten Modell und Controller würde es so aussehen:
button(() -> {
textColor(Color.RED);
text("Geklickt " + mModel.getClickCount());
onClick(mController::onButtonClicked);
});
Hier wird bei jedem Klick auf die Schaltfläche die Anzahl erhöht, dann wird "render()" aufgerufen, und der Text der Schaltfläche wird aktualisiert.
Die Syntax wird angenehmer, wenn Sie Kotlin verwenden: http://zserge.com/blog/anvil-kotlin.html. Außerdem gibt es eine alternative Syntax für Java ohne Lambdas.
Die Bibliothek selbst ist sehr leichtgewichtig, hat keine Abhängigkeiten, verwendet keine Reflektion usw.
(Haftungsausschluss: Ich bin der Autor dieser Bibliothek)
Gemäß der Erklärung, die das Xamarin-Team (auf dem iOS MVC "Ich weiß, es sieht merkwürdig aus, aber warte einen Moment") gegeben hat:
Ich kann sagen:
Das Model auf Android ist einfach das parcelable Objekt. Die Ansicht ist das XML-Layout und der Controller ist die (Activity + ihr Fragment).
*Dies ist nur meine Meinung, nicht aus einer Quelle oder einem Buch.
Ich habe festgestellt, dass viele Leute sagen, dass MVC bereits in Android implementiert ist, aber das stimmt nicht. Android folgt standardmäßig keinem MVC.
Weil ich nicht glaube, dass Google jemals die Beschränkungen einer MVC-Implementierung wie bei iPhone erzwingen wird, liegt es an den Entwicklern, welches Muster oder welche Technik sie in ihrem Projekt verwenden möchten. Bei kleinen oder einfachen Anwendungen ist die Verwendung von MVC nicht erforderlich. Wenn die Anwendung jedoch wächst und komplizierter wird und eine Änderung ihres Codes in späteren Jahren erforderlich ist, wird das MVC-Muster in Android benötigt.
Es bietet einen einfachen Weg, den Code zu ändern und hilft auch bei der Reduzierung von Problemen. Wenn Sie MVC auf Android implementieren möchten, folgen Sie diesem unten angegebenen Link und genießen Sie die MVC-Implementierung in Ihrem Projekt.
http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/
Aber ich denke heutzutage, dass MVP zusammen mit dem Android-Architekturmuster eine der besten Optionen ist, die Entwickler für saubere und robuste Android-Anwendungen verwenden sollten.
Wenn wir MVC, MVVM oder Presentation Model auf einer Android-App anwenden, wollen wir eigentlich ein klar strukturiertes Projekt haben, und noch wichtiger, dass es einfacher für Unittests ist.
Derzeit haben Sie ohne ein Framework von Drittanbietern in der Regel viel Code (wie addXXListener(), findViewById() usw.), der keinen geschäftlichen Mehrwert bietet.
Darüber hinaus müssen Sie Android-Unittests anstelle von normalen JUnit-Tests ausführen, die lange dauern und Unittests praktisch unmöglich machen. Aus diesen Gründen haben wir vor einigen Jahren ein Open-Source-Projekt gestartet, RoboBinding - Ein Datenbindungs-Presentation-Model-Framework für die Android-Plattform.
RoboBinding hilft Ihnen dabei, UI-Code zu schreiben, der leichter zu lesen, zu testen und zu warten ist. RoboBinding beseitigt die Notwendigkeit von unnötigem Code wie addXXListener oder so und verlagert die UI-Logik zum Presentation-Model, das ein POJO ist und über normale JUnit-Tests getestet werden kann. RoboBinding kommt selbst mit mehr als 300 JUnit-Tests, um seine Qualität sicherzustellen.
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.