Laden...

MVU Pattern - Erfahrungsaustausch gesucht

Erstellt von Unfug vor 2 Jahren Letzter Beitrag vor 2 Jahren 694 Views
U
Unfug Themenstarter:in
133 Beiträge seit 2006
vor 2 Jahren
MVU Pattern - Erfahrungsaustausch gesucht

Hallo myCSharp,

ich hatte die Suche verwendet aber noch kein Thema zum MVU Pattern gefunden.
Um ehrlich zu sein kenne ich die üblichen verdächtigen Seiten. Für mich am einfachsten war das Tutorial.
https://guide.elm-lang.org/architecture/

ELM nutzt ja MVU. Und das kommt jetzt so langsam in MAUI an. Blazor wirkt ebenfalls wie eine Art MVU.

Was ich aber absolut nicht verstehe ist: Wo ist denn die Neuheit? Das mein ich nicht auf eine arrogante Art und Weise, sondern ich verstehe es wirklich nicht.
Für mich liest sich MVU, dass man einfach die UI neu rendert nach jeder Anpassung des Models.
Diese Vorgehensweise gibt es doch schon ewig. Man konnte das auch bei WPF so machen oder Winforms oder ASP.
Und alles in einer Update Methode zu verarbeiten statt mehrere Code Behind EventHandler - ok..meinetwegen. Aber bringt das jetzt wirklich was?
Was Blazor macht ist, nur den Teil neu zu rendern, der sich geändert hat - was ja richtig richtig cool ist. Aber das kann damit ja nicht gemeint sein.

Die Tatsache, dass immer bewusst der Begriff ViewModel wegelassen wird bei den Erklärungen führt zu einer weiteren Frage.
Wenn ich zwei Models habe wie:

Person { Nummer, Alter, Name}
Arbeit {PersonNummer, Position}
und beide in der selben UI verwenden möchte, dann macht es doch einfach Sinn ein ViewModel zu erstellen
ViewModel { Nummer, Alter, Name, Position} und dieses bei MVU zu nutzen. Doch dann wären wir bei MVVMU .

Vielen Dank für eure Erfahrungen und Erklärungen

16.806 Beiträge seit 2008
vor 2 Jahren

Wo ist denn die Neuheit? Das mein ich nicht auf eine arrogante Art und Weise, sondern ich verstehe es wirklich nicht.

Im Gegensatz zu den anderen reinen UI Pattern ist MVU ein extrem simpler und funktionaler Pattern. Es gibt keine komplexen Bindings, sondern das Update erfolgt immer auf das Model (auf Basis von Messages).
Das Model stellt wiederum den State dar, auf dessen Basis die View erzeugt wird - ja, jedes mal.
Das hilft gerade in der UI enorm Komponenten zu erstellen, die Unabhängig sind. Das fördert zum Beispiel auch Parallelität, weil es quasi keine Side Effects mehr gibt.

Der Nachteil von MVU ist, dass die Tests in der Theorie aufwändiger sind; deutlich aufwändiger als in MVVM.
Aber MVVM ist ein 3-Tier-Pattern, der in der UI Welt sehr oft weh tut. MVVM ist halt eher für größere Anwendungen gedacht; weswegen WPF und MVVM meist ein Overkill für kleine Tools ist.

Es gibt durch MVU sehr nette Nebeneffekte (bzw. durch das funktionale Vorgehen, zB Time Travel Debugging).

Diese Vorgehensweise gibt es doch schon ewig. Man konnte das auch bei WPF so machen oder Winforms oder ASP.

Um das beurteilen zu können, muss man MUV verstehen. Dann kommt man zum Entschluss: nein, MVU ging so in .NET im Standard nirgends.

  • In WinForms verwenden man meist MVP. Viele verwenden einfach gar keinen Pattern.
  • In ASP.NET ist der Standardpattern seit vielen vielen Jahren sowie konzeptionell MVC bzw. Razor Pages.
  • Bei WPF ist der vorgesehene Pattern MVVM.

Der MVU Pattern hat sich aber in vielen Umgebungen (iOS, Flutter, React..) bewährt - auch weil einfach die meisten Devs MVVM nicht mal korrekt implementieren.
MVU ist für Blazor und MAUI ein absoluter Gewinn.

U
Unfug Themenstarter:in
133 Beiträge seit 2006
vor 2 Jahren

Hallo @Abt,

Danke. Im Grunde, glaub ich, kann ich alles nachvollziehen.
Aber eine Nachfrage habe ich doch noch:

MVU ist ja nur ein Pattern und MVVM ist ja auch kein Muss bei WPF. Wieso kann man nicht sagen, dass wenn ich ein Model habe, dass ich an ein eine WPF-View übergebe, dort nur One-Way Binding mache (nur anzeigen) und dann hinter jedem Button/Click eine Methode baue die mir


Model With { Property: NeuerWert }  //Syntax jetzt nur exemplarisch aus Records geklaut. 
RenderKompletteUINeu()

macht, dieses als MVU bezeichnen? Im Grunde ist es doch genau das.
Das kann ich auch auf ASP oder alle anderen Sprachen übertragen. Ich rendere einfach mein ViewModel und jede Änderung führt dazu, dass das Model geupdatet wird und dann wird die UI komplett neu gerendert (statt wie bei Blazor und MAUI MVU nur Teile neu gerendert werden).
In der Theorie ist doch genau das MVU. Oder liege ich hier falsch?.

16.806 Beiträge seit 2008
vor 2 Jahren

WPF ist so konzipiert, dass MVVM verwendet wird. Die Basis sind ViewModels.
Bei MVU gibts aber keine ViewModels. MVU ersetzt auch eher den Unterbau als die View.

Es gibt mit GitHub - elmish/Elmish.WPF: Static WPF views for elmish programs ein Open Source Projekt, das sehr sehr viel in WPF umbiegt, um MVU möglich zu machen.
Da sind aber viele Tweaks dabei; teilweise ist es auch kein echtes MVU.

U
Unfug Themenstarter:in
133 Beiträge seit 2006
vor 2 Jahren

Ok Danke.
Noch Ergänzend:

Dieses Video zeigt auch nochmal sehr genau wie was worum es geht. Kann ich jedem nur empfehlen, der sich damit auseinandersetzen möchte.
Introduction to Comet and MVU - YouTube