Jemand in Silverlight veröffentlicht dass es MVVM derzeit an Standardisierung fehlt, so dass jeder seinen eigenen Geschmack hat
Das ist der Grund, warum ich und ein paar Jungs von WPF Disciples sind aktiv zu diskutieren, welche Elemente von MVVM, dass jeder vereinbart. Ich verstehe vollkommen, dass wir das Muster auf unterschiedliche Art und Weise implementiert haben und wir haben die verschiedenen Muster gemischt oder unsere eigenen Muster basierend auf den Bedürfnissen unseres Projekts erstellt oder um das Leben der Entwickler einfacher zu machen. Aber vergessen Sie diese Schwierigkeiten oder die speziellen Anforderungen Ihres Projekts. Lassen Sie uns über die Standardregeln des MVVM-Musters diskutieren, über die sich alle einig sind. Ich habe gepostet einige meiner Gedanken hier auch.
Warum MVVM?
- Testbarkeit (ViewModel ist einfacher zu testen als Code-Behind oder ereignisgesteuerter Code)
- Klare Trennung zwischen UX-Designer und Entwickler
- Erhöht die "Überblendbarkeit" Ihrer Ansicht
- Das Modell muss nie geändert werden, um Änderungen an der Ansicht zu unterstützen.
- Das ViewModel muss nur selten geändert werden, um Änderungen an der Ansicht zu unterstützen.
- Kein doppelter Code zur Aktualisierung von Ansichten
Do and Don't in View
- sollte keine Logik enthalten, die Sie testen wollen: Wie Glenn sagte, ist MVVM keine Code-Zählübung, wir können Code in Code-Behind schreiben. Aber Sie sollten niemals eine Logik schreiben, die Sie testen wollen. Zum Beispiel: Wenn der Benutzer ein Land auswählt, möchten Sie die Liste der Staaten oder Städte in Ihrer Ansicht anzeigen. Dies ist die Geschäftsanforderung, so dass Sie Unit-Tests haben sollten, um diese Logik zu testen. Sie sollten sie also nicht in Code-Behind schreiben.
- kann ein Steuerelement oder eine Datenvorlage sein
- Halten Sie die Ansicht so einfach wie möglich: Wir können immer noch Data Trigger oder Value Converter oder Visual State oder Blend Behivor in XAML mit Vorsicht verwenden.
- Verwenden Sie die angehängte Eigenschaft, wenn etwas nicht bindungsfähig ist:
Do und Don't im ViewModel
- Verbindung zwischen Ansicht und Modell
- Keep View State, Value Conversion (Sie können die Datenstruktur, die Sie in ViewModel anzeigen möchten, statt mit ValueConverter erstellen. Zum Beispiel: Sie müssen den Namen anstelle von Vorname und Nachname anzeigen. Ihr Model kann Vornamen und Nachnamen haben, aber Sie können die Eigenschaft Name im ViewModel erstellen. )
- Kein starker oder schwacher (über die Schnittstelle) Bezug der Ansicht
- VM so testbar wie möglich machen (z.B. kein Aufruf der Singleton-Klasse)
- Kein Control related Stuff in VM (Wenn Sie die Ansicht ändern, müssen Sie auch VM ändern. )
Modell
- kann ein Datenmodell, ein DTO, ein POCO, ein automatisch generierter Proxy einer Domänenklasse und ein UI-Modell sein, je nachdem, wie Sie die Trennung zwischen Domänendienst und Präsentationsschicht wünschen
- Kein Verweis auf ViewModel
Haben Sie dazu eine Anregung oder einen Kommentar?
Wir haben eine Meinungsverschiedenheit in unserer Fraktion. Einige sagten, dass es in Ordnung ist, die Schnittstelle von View in ViewModel zu haben. Aber einige sagten, wenn View Model die Schnittstelle von View hat, dann wird es MVP-Muster sein.
Einer unserer MVVM-Experten sagt über MVVM Vs MVP
Ansicht => ViewModel
- MVVM ist die Ansicht direkt an das ViewModel gebunden und spricht mit der VM durch Datenbindung
- In MVP ist die Ansicht an ein Modell gebunden, das am SupervisingController hängt, oder überhaupt nicht gebunden (passive Ansicht).
ViewModel => Ansicht
MVVM
- INPC / Immobilienbindung
- Veranstaltungen
- Nachrichten (Ereignis-Aggregator/Messenger/RX-Rahmen)
- Über einen Vermittler, z. B. einen Dienst
- Über eine Schnittstelle
- Über Delegaten (View übergibt Delegaten an die VM, die sie zum Rückruf verwenden kann. Zum Beispiel könnte die VM eine SetActions-Methode bereitstellen, die die View aufruft, indem sie ihr Delegates übergibt.
MVP
Im MVP-Fall ist der Standard, dass der Presenter mit der Ansicht entweder über eine Schnittstelle, Datenbindung oder über Eigenschaften im Fall der passiven Ansicht kommuniziert. Bei der passiven Ansicht verwenden die Eigenschaften keine Datenbindung, stattdessen werden die Getter und Setter der Ansichtseigenschaften verwendet, um den Wert des Steuerelements direkt einzustellen.
Was halten Sie von dieser Idee?
Glauben Sie, dass es in Ordnung ist für ViewModel haben die Schnittstelle von View?
Wenn Sie mehr hinzufügen möchten, können Sie das gerne tun... :)
Die ganze Idee zu diesem Beitrag ist es, das gleiche Verständnis von MVVM-Muster in der Gemeinschaft zu bekommen.
1 Stimmen
Ich denke, diese Frage sollte ein Community Wiki sein.
0 Stimmen
Sicher wie kann ich diese Frage in das Community Wiki verschieben? Tut mir leid.. Kann mir jemand helfen, sie zu verschieben? oder Bitte lassen Sie mich wissen, wie ich sie verschieben kann. Danke!
0 Stimmen
Ich denke, das ist ein zu großes Argument, um als cwiki zu überleben, aber wir werden sehen, was andere denken.
0 Stimmen
Ich sah einige Diskussionen wie warum MVVM oder andere Muster hier das ist, warum ich denke, um es hier zu posten. Mir ist aufgefallen, dass es in diesem Forum eine Menge großartiger Entwickler/Architekten gibt. Ich hoffe, ich werde einige Eingaben von einigen Experten hier bekommen. Danke!