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?

5voto

zserge Punkte 2163

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)

4voto

zaPlayer Punkte 767

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:

  • Das Model (Daten oder Anwendungslogik),
  • Die Ansicht (Benutzeroberfläche) und
  • Der Controller (Code dahinter).

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.

4voto

Lucky Rana Punkte 1010

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.

2 Stimmen

Agreed. Android hat genug Flexibilität, um sich selbst aufzuhängen. Diese Activity von dir kann schnell riesig und kompliziert werden, wenn sie alle drei Aspekte von MVC behandelt.

4voto

carlos.baez Punkte 943

Es gibt keine implementierte MVC-Architektur, aber es gibt eine Reihe von Bibliotheken / Beispielen, um eine MVP (Model-View-Presenter)-Architektur zu implementieren.

Bitte überprüfen Sie diese Links:

Google hat ein Beispiel für eine Android-Architektur MVP hinzugefügt:

2voto

Cheng Punkte 562

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.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