Wie unterscheidet sich MVVM in .NET von MVC in Kakao?

8

Ich lese gerade auf MVVM und kann für das Leben von mir nicht sagen, wie die 'Modellansicht' von MVVM radikal anders ist als der 'Controller' in MVC, wie er in der Cocoa-Programmierung verwendet wird.

Ich habe sogar einige Erklärungen gelesen, die angeblich 'aha' Momente für andere waren und es immer noch nicht geschafft haben, den Unterschied zu erkennen. Die begrenzte Cocoa-GUI-Programmierung, die ich gemacht habe, beinhaltete das Behandeln des Controllers als den zentralen Punkt zum Verwalten von Daten, die zu AND von der Ansicht zu dem Modell gehen, unter Verwendung der Schlüsselwertbeobachtung.

In allen wichtigen Aspekten scheint mir das, was die Modellansicht tut, außer dass es ein subtiler Implementierungsunterschied sein könnte, der sich auf die WPF & lt; - & gt; C # -Brücke in .Net. Das heißt, MVC in Cocoa könnte MVVM genannt werden, wenn die Cocoa-GUI in einer anderen Sprache als der Anwendungscode angegeben wurde und der Controller in derselben Sprache wie die GUI anstelle der Anwendung codiert ist (dh WPF wird in XAML und nicht in XAML angegeben) C #).

Oder vielleicht MVC in Nicht-Cocoa-Umgebungen, ohne die Schlüssel-Wert-Beobachtung, etc. ist weit anders als MVC wie in Cocoa angewendet und das hat dazu geführt, dass Menschen größere Unterschiede zwischen MVVM und MVC finden als ich.

Bin ich verrückt? Bitte erziehe mich.

    
Cyclone 03.05.2011, 05:26
quelle

1 Antwort

13

Ich bin seit Jahren ein großer Fan von MVVM in WPF und habe kürzlich MVC in Cocoa aufgenommen. Zuerst schienen sie identisch zu sein, dann ähnlich, und jetzt, wo ich mehr mit Cocoa arbeite, nichts Ähnliches.

Mein Gefühl ist, dass die Unterschiede in der Richtung der Bindung liegen.

In MVVM bindet die Ansicht an Eigenschaften auf einem ViewModel-Objekt (V - & gt; VM). Ändern Sie die Eigenschaften des ViewModel-Objekts, und mit ein wenig Jiggery-Poker mit NotifyPropertyChanged aktualisiert sich die Ansicht auf magische Weise. Die Ansicht liest Eigenschaften im View Model-Objekt passiv aus und das ViewModel weiß absolut nichts über die View - Sie könnten die View löschen und es würde immer noch funktionieren. Dies gibt Ihnen die Flexibilität, Ansichten neu zu schreiben, zu ändern oder zu kombinieren und sie "einfach funktionieren" zu lassen, ohne den Code für die Zeilenansicht zu ändern.

In MVC unter Cocoa (iOS) bindet sich der View-Controller über explizite IBAction / IBOutlet-Eigenschaften an die View (VC - & gt; V) - Sie haben eine direkte Referenz in Ihrem View-Controller auf die View-Objekte. Sie sagen einem Steuerelement in der Ansicht direkt, dass es in Ihrem Ansichtscontroller geändert werden soll, und der ViewController verfügt über detaillierte Informationen über die Interna der Ansicht. Löschen Sie die Ansicht, und der ViewController wird Laufzeitausnahmen auslösen.

Bei mir geht es um die Richtung der Bindung.

Mit Cocoa, die das MVC-Muster verwenden, "steuern" Sie direkt die Ansicht durch den View-Controller (Grund zur Vernunft, richtig?).

In MVVM / WPF aktualisieren Sie die Ansichtskontrolle selbst, indem Sie nach Änderungen am ViewModel-Objekt suchen - die Bindung ist umgekehrt und passiv.

WPF ohne MVVM ist genau wie Cocoa MVC für iOS und fühlt sich ein wenig wie ASP.NET-Formulare an.

Für Cocoa für OSX steht eine MVVM-ähnliche Bindungsstrategie zur Verfügung, die jedoch unter iOS nicht verfügbar ist.

    
JasonD 20.02.2012, 22:53
quelle