none
MVVM RRS feed

  • Frage

  • Hallo,
    ja Ihr habt ja Recht.  (Thread Zukunft WinForms )
    Ist nicht so schnell mal gemacht, wie manche es denken.
    1 und     2
    Dann zögert sich die Umstellung noch raus.
    Was konkret empfehlt Ihr wirklich? Was macht Sinn?

    Bedingung - Eigenstudium
    Buch oder das von Microsoft rigide durchgehen.
    Die Trennung Model zu View ist verständlich und macht durchaus Sinn.
    Model zu View
       Wie werden dort / sollten dort die Daten ausgetauscht / werden ?
       - Socket
       - SOAP
       - NamedPipe
    Was mit etwas unklar ist, ist die Zwischenschicht ViewModel
       Ist es vereinfacht so zu sehen, ich habe ein Textfeld mit Preis in €
       Gebe jedoch einen string ein, dann muss dort etwas Logik dahinter sein.
      
    @Peter, evtl. hast Du ein gutes anschauliches C# Beispielprojekt.
            Du gibst doch auch Schulungen. Danke im Voraus.
    Viele Grüße  Sandra
    Mittwoch, 9. November 2016 17:36

Antworten

  • Hi Sandra,
    Deine Darstellung entspricht nicht meinem Verständnis.

    ViewModel und Model sind .NET-Objekte, auf die mit den .NET-Mitteln (Member) zugegriffen wird. Socket, NamendPipes und andere Kommunkationsprotokolle haben damit nichts zu tun.

    Hilfs-Objekte wie beispielsweise Konverter würde ich keiner Schicht zuordnen. Ich lege sie deshalb häufig in separaten Projekten ab.

    Der ViewModel kann Dispatcher-Funktionen enthalten, je nachdem, was man unter Dispatcher versteht. Der ViewModel ist das Bindeglied zwischen dem Datenspeicher, auch den mit dem Model ztugegriffen wird, und der Oberfläche, die der Anwender nutzt.

    Wenn die Funktionen des ViewModels oder auch des Models funkionell auf unterschiedliche physische Ebenen aufgeteilt werden, dann kann zwischen den Teilen des ViewModels auch ein Kommunikatrionsprotokoll zur Anwendung kommen. Beispiel dazu kann eine Phone-Anwendung sein, wo auf dem Phone ein Teil des ViewModels läuft, der vorrangig die Eiegnschafrten für die Bindung an die Oberfläche bereitstellt, über WCF aber mit dem Teil des ViewModels verbunden ist, der komplexere Prozesse der Geschäftslogik verwaltet wie beispielsweise Workflows. 


    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Sandra Bauer Freitag, 11. November 2016 16:41
    Donnerstag, 10. November 2016 19:08
  • Hallo Sandra,

    Du kannst dir auch das Tutorial anschauen Link, vielleicht lernst Du ja so besser. Hier auch ein kleiner einblick Link

    Tom hat aber recht ein Pattern wie MVVM wirst Du wirklich erst verstehen wenn Du es einsetzt.

    Leider kann das auch Monate dauern. Das Pattern MVC habe ich erst nach der 2 "großen" Web Anwendung wirklich verstanden

    Gruß

    Thomas


    Icon für UWP: https://www.microsoft.com/store/apps/9nblggh5fzpm

    • Als Antwort markiert Sandra Bauer Freitag, 11. November 2016 16:41
    Freitag, 11. November 2016 01:51
  • Hi Sandra,
    zu MVVM habe ich Beispiele in der aussagekräftigen Programmiersprache Basic (resp. VB.NET). Schau mal bei mir hier.

    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Sandra Bauer Samstag, 12. November 2016 11:30
    Freitag, 11. November 2016 16:54

Alle Antworten

  • Hallo Sandra,

    ich habe zwar nie einen richtigen Umstieg von WinForms zu WPF gemacht, sondern fast von Beginn an mit WPF gearbeitet, nichtsdestotrotz habe ich erstmal in WPF die Weise kennengelernt wie man in WinForms Anwendungen schreibt. (viel Codebehind, kein MVVM, praktisch keine Datenbindungen etc.)
    Von daher kann ich hier maximal einen kleinen Erfahrungsbericht geben.

    Ich bin mit der MSDN damals gut voran gekommen. Dabei werden viele Beispiele "durchgesprochen", wobei ich immer etwas eigenes geschrieben habe. Denn nur wenn man es auch benutzt, gewöhnt man sich an die neue Umgebung und begreift sie auch. Ansonsten gibt es vielleicht auch in der MVA diverses Material, wobei ich eher der Buch-Mensch bin. Da gibt es auch noch einiges an kostenlosem (Beispiel) und kostenpflichtigem Material. Wenn du so etwas durcharbeitest und auch verstehst wirst du sicher eine gute Grundlage haben.

    Grob gesagt stellt das Model die Daten bereit, die View zeigt die Daten an und stellt auch für Eingaben eine Schnittstelle zum Benutzer bereit. Das ViewModel sorgt nun für die Kommunikation zwischen View und Model. 
    Ich für meinen Teil habe das damals erst verstanden als ich wirklich Anwendungen damit geschrieben habe. Davor wird das recht theoretisch und damit für die meisten schwer begreifbar.

    PS: Bezüglich Beispiel habe ich kein wirklich was viel zeigt. Und das meiste dürfte für den Anfang auch mit Kanonen auf Spatzen schießen sein. Von daher empfehle ich dir die MSDN/Buch Beispiele zu nutzen die dem aktuellen Wissensstand entsprechen oder aber dir selbst etwas auszudenken und uns dann mal im Forum zu fragen was man besser machen kann.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Mittwoch, 9. November 2016 19:50
    Moderator
  • Hi Sandra,
    das Hauptproblem bei MVVM ist das Verständnis dafür. Wer schon immer Geschäftslogik von der Darstellung maximal getrennt hat, braucht sich für den Anfang nur die Veränderungen von DataBindings.Add zu den neuen Möglichkeiten in WPF aneignen. Der Aufwand für die Geschäftslogik unterscheidet sich im CodeBehind praktisch nicht vom ViewModel. Im ViewModel ist lediglich etwas mehr Aufwand für die Implementierung der für die Bindung erforderlichen Eigenschaften notwendig im Gegensatz zur direkten Zuweisung aus dem Codebehind. Dafür reduziert sich der Aufwand in MVVM an anderen Stellen u.U. drastisch, z.B. beim Test, bei der Anpassung an veränderte Darstellungswünsche usw.

    Welcher der Qualifizierungswege optimal ist, hängt von den persönlichen Vorzügen und den Möglichkeiten (z.B. auch Zeit und Geld) ab. Ich bevorzuge z.B. eine konkret zu realisierende Aufgabe und suche mir dann Informationsquellen (Schulungen, Vorträge, Bücher, Webcasts usw.).

    Wie der Model mit den externen Datenquellen verfährt, hängt vor allen davon ab, welche Zugriffstechniken unter den vorgegebenen Randbedingungen für diese Datenquellen optimal nutzbar sind. Letztendlich ist der Model ein Mapper, der die externen Daten bzw. Datenstrukturen als im Programm nutzbare Datenobjekte bereitstellt und bei Bedarf wieder zurückschreibt.

    Der ViewModel enthält die Geschäftslogik. Im einfachsten Fall mappt der ViewModel die Datenobjekte zu Eigenschaften, die dann von der Oberfläche genutzt werden kann.

    Die Konvertierung von Text zu Preis und umgekehrt ist nicht Aufgabe des ViewModels, sondern Aufgabe von Konvertern. Der ViewModel stellt den Preis bereit für Anzeige. Der Konverter wandelt den Preis in eine Zeichenkette um, wenn die Standardumwandlung nicht angewandt werden soll.

    Ich habe hier im Forum bereits viele MVVM Beispiele zu Teilthemen gepostet. Du solltest etwas konkreter schreiben, bei welchem Beispiel Details unbeachtet bleiben und deshalb das Beispiel erweitert werden sollte.


    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks



    Mittwoch, 9. November 2016 20:16

  • Ich für meinen Teil habe das damals erst verstanden als ich wirklich Anwendungen damit geschrieben habe. Davor wird das recht theoretisch und damit für die meisten schwer begreifbar.

    Hallo Tom,
    ja es ist nicht alles so einfach.
    Viele Grüße Sandra
    Donnerstag, 10. November 2016 18:00
  • Hallo Peter,

    ja ok. Kannst nicht aus Deiner ganzen Erfahrung nochmals ein Musterprojekt vorschlagen.
    Dann wäre z.B. ein Konverter in der View zu implementieren.

    test5Sehe ich die untere Darstellung richtig?
    Interessant, wäre für mich noch der Datenaustausch der Komponenten.
    Was ist da zu bevorzugen?

    Grüße Sandra
    Donnerstag, 10. November 2016 18:02
  • Hi Sandra,
    Deine Darstellung entspricht nicht meinem Verständnis.

    ViewModel und Model sind .NET-Objekte, auf die mit den .NET-Mitteln (Member) zugegriffen wird. Socket, NamendPipes und andere Kommunkationsprotokolle haben damit nichts zu tun.

    Hilfs-Objekte wie beispielsweise Konverter würde ich keiner Schicht zuordnen. Ich lege sie deshalb häufig in separaten Projekten ab.

    Der ViewModel kann Dispatcher-Funktionen enthalten, je nachdem, was man unter Dispatcher versteht. Der ViewModel ist das Bindeglied zwischen dem Datenspeicher, auch den mit dem Model ztugegriffen wird, und der Oberfläche, die der Anwender nutzt.

    Wenn die Funktionen des ViewModels oder auch des Models funkionell auf unterschiedliche physische Ebenen aufgeteilt werden, dann kann zwischen den Teilen des ViewModels auch ein Kommunikatrionsprotokoll zur Anwendung kommen. Beispiel dazu kann eine Phone-Anwendung sein, wo auf dem Phone ein Teil des ViewModels läuft, der vorrangig die Eiegnschafrten für die Bindung an die Oberfläche bereitstellt, über WCF aber mit dem Teil des ViewModels verbunden ist, der komplexere Prozesse der Geschäftslogik verwaltet wie beispielsweise Workflows. 


    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Sandra Bauer Freitag, 11. November 2016 16:41
    Donnerstag, 10. November 2016 19:08
  • Hallo Sandra,

    Du kannst dir auch das Tutorial anschauen Link, vielleicht lernst Du ja so besser. Hier auch ein kleiner einblick Link

    Tom hat aber recht ein Pattern wie MVVM wirst Du wirklich erst verstehen wenn Du es einsetzt.

    Leider kann das auch Monate dauern. Das Pattern MVC habe ich erst nach der 2 "großen" Web Anwendung wirklich verstanden

    Gruß

    Thomas


    Icon für UWP: https://www.microsoft.com/store/apps/9nblggh5fzpm

    • Als Antwort markiert Sandra Bauer Freitag, 11. November 2016 16:41
    Freitag, 11. November 2016 01:51
  • ViewModel und Model sind .NET-Objekte, auf die mit den .NET-Mitteln (Member) zugegriffen wird. Socket, NamendPipes und andere Kommunkationsprotokolle haben damit nichts zu tun.

    Hilfs-Objekte wie beispielsweise Konverter würde ich keiner Schicht zuordnen. Ich lege sie deshalb häufig in separaten Projekten ab.


    Hallo Peter,
    ich schaue mir die Beispiele mal von Thomas an.
    Wie gesagt, wenn Du aus Deinen Schulungen ein prägnantes Beispiel hast, wäre es noch nett. Ansonsten ja, Frage mal beantwortet.
    Viele Grüße Sandra
    Freitag, 11. November 2016 16:42
  • Hi Sandra,
    zu MVVM habe ich Beispiele in der aussagekräftigen Programmiersprache Basic (resp. VB.NET). Schau mal bei mir hier.

    --
    Viele Grüsse
    Peter Fleischer (MVP Reconnect, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Sandra Bauer Samstag, 12. November 2016 11:30
    Freitag, 11. November 2016 16:54