Announcement

Collapse
No announcement yet.

Architekturgedanken zur Portierung von WinForms-Anwendungen nach Silverligth

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hallo,

    wie weiter vorne angekündigt die "Hausaufgabe". Da das Forum ja laut Regeln keine Hausaufgaben löst heißt das aber nicht dass im Forum keine Hausaufgaben vergeben werden dürfen

    Nachdem mir Günther Weber seine Lösung zur "Prüfung" gesendet hat, hab ich auch eine Lösung erstellt - für mich ist es eine "Musterlösung". Zugegebenermaßen habe ich für diese einfache Aufgabe (Addition von 2 positiven Ganzzahlen) einen Overkill betrieben, aber dabei versucht das streng nach TDD und MVVM aufzuziehen. Im Vergleich zu realen Projekt - wie ich es beruflich zu tun habe - fehlen nur 2(3) Schritte.
    1. Eine Modellierungsphase zu Beginn -> für diese Aufgabe ist/war das Schema F und ging problemlos im Kopf
    2. Das Projekt unter Versionskontrolle haben (bei mir: TortoiseSVN)
    3. Der Großteil der Kommentare entfällt da es nur Rauschen im Code ist. Hier aber ausführlich durchgeführt so dass vom Code gelernt werden kann.


    Was habe ich beim Projekt umgesetzt:
    • Die geforderte Aufgabe -> siehe obigen Link. Beide Varianten, also die Berechnung direkt am Client sowie die Berechnung am Server per WCF-Dienstaufruf.
    • Umsetzung (streng) nach MVVM
    • NUnit-Tests für das Model, ViewModel, Berechnungslogik (2+3=5 muss getestet werden ) und sonst eigentlich alles was getestet werden soll
    • einen eifachen Behavior mit dem der Inhalt einer Textbox selektiert wird falls die Textbox den Fokus erhält (kann wiederverwendet werden)


    Da das Projekt als Anhang für das Forum zu groß ist kann es von meinem SkyDrive heruntergeladen werden. Es wurde für .net 4.0 und Silverlight 4.0 erstellt und sollte eigentlich lauffähig sein Anzupassen ist die hartcodierte URL im Silverlight-Projekt für den WCF-Endpunkt (http://localhost:XXXX/....)

    Fragen, etc. bitte hier im Forum behandeln (da dies auch die Quelle der Aufgabe ist).


    mfG Gü
    Zuletzt editiert von gfoidl; 06.08.2010, 16:51.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #17
      Wow super Danke Günther!!! Das werd ich mir auf jeden Fall mal anschauen!!!

      Comment


      • #18
        Das ist mehr als nur eine Musterlösung, danke dafür. Leider hab ich nur die 0-8-15 Installation vom Web Developer. Bei einigen using-Anweisungen bekomme ich eine Fehlermeldung. Und da ich im Urlaub keine Flatrate habe, konnte ich diese und die Folgefehler erst einmal nur einkommentieren.

        Code:
        using System.Windows.Interactivity;
        using NUnit.Framework;
        using Microsoft.Silverlight.Testing;
        using Microsoft.Silverlight.Testing.UnitTesting.Metadata.NUnit;


        Zu NUnit hast Du in einer Readme-Datei schon die Internetadresse angegeben. Bei den anderen kann es sein, dass man über google sehr schnell an die gewünschten Infos kommt, muss aber nicht. Eventuell kannst Du dazu noch ein paar Hinweise geben? Mir ist das Internet hier zu langsam und zu teuer. Und schließlich will ich ja auch noch Urlaub machen :-).
        LG, Günther
        Günther

        Comment


        • #19
          Ich habe mir nun einige Tutorials und Erklärungen zum MVVM-Pattern angeschaut. Dabei geht es aber immer um mehr oder weniger kleine Beispiele die demonstrieren, wie man Anwendungen fast nur in xaml programmiert, mit sehr wenig C#-Code, der dann auf den 1. Blick auch noch sehr abstrakt erscheint. Am Sternenhimmel sehe ich ein großes Projekt, das ich gern realisieren möchte. Mit Windows-Forms hab ich das schon, mit sehr vielen statischen Klassen.

          Vereinfacht beschrieben (also auch abstrakt) stelle ich mir mein Projekt so vor: Drei Eingabeblöcke, die ich gern in je einer View definieren würde: AuswahlView1…AuswahlView3. Ein Ausgabefenster in Textform: ErgebnisTextView und ein grafisches Ausgabefenster: ErgebnisGrafikView.

          Zu jeder View ein ViewModel: ViewModel1…ViewModel5. Die ViewModels 1…3 greifen jeweils auf 1 oder mehrere Datendateien (Models) zu. Eine Auswahländerung in View1 oder View2 zieht einen Neuaufbau der Listen in View3 nach sich, weil je nach Auswahl dort nicht alle Optionen verfügbar sind. Eine Änderung der Auswahl in View3 hat eine Berechnung zur Folge.

          Bei der Berechnung muss auf die Daten sämtlicher Models zugegriffen werden können. Die Berechnung erstellt eine Liste mit allen denkbaren Lösungsmöglichkeiten und wählt am Ende die günstigste Lösung aus. Aus dieser Lösung müssen nun ViewModel4 und 5 aktualisiert werden.

          Im BerechnungsViewModel ich hab das mal so genannt, weil es ja im Prinzip ein ViewModel ist, allerdings ohne View - und im ViewModel5 wird sehr viel C#-Code stecken, der das eigentliche Know-How dieser Anwendung darstellt.

          In der Anlage hab ich mit meinen bescheidenen Mitteln versucht, diese Struktur grafisch darzustellen. Mich würde mal interessieren, ob ich mit meinen Gedanken in etwa richtig liege.

          Danke - Günther
          Attached Files
          Zuletzt editiert von gfoidl; 31.08.2010, 16:14.
          Günther

          Comment


          • #20
            Hallo,

            für mich ist das keine Architektur. Die Bezeichnungen sollten auch sinnvoll gewählt werden - so sind diese in keinster weise aussagekräftig. Schau dir mal die Links in diesem Thema an. Da sind einige interessante dabei und bei einem wird auch gezeigt wie eine Anwendung (wenn auch eine Webanwendung) entworfen.

            VS 2010 Ultimate bietet hierzu zwar Unterstützung aber das ist nur ein Werkzeug. Es gibt genügend Alternativen - es kann hierzu auch ein CAD-Programm missbraucht werden.

            Mit Windows-Forms hab ich das schon, mit sehr vielen statischen Klassen.
            Statische Klassen sind in diesem Zusammenhang meist böse und nicht notwendig. Es gibt (viel) besser OO-Alternativen. Das kann ich aber so nicht pauschal sagen.

            Lies dir auch nochmal meine Eingangsbeitrag zu diesem Thema durch und vergiss die alte Winforms-Anwendung. Du willst eine neue Anwendung machen -> also mach sie auch neu*

            * v.a. wenn die alten so viele Architekturfehler drin hatte und du es perfekt machen willst.


            mfG Gü
            Zuletzt editiert von gfoidl; 31.08.2010, 17:25. Reason: CAC zu CAD korrigiert
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #21
              Originally posted by gfoidl View Post
              für mich ist das keine Architektur.
              meinst Du wegen der nicht normgerechten Darstellung?
              Originally posted by gfoidl View Post
              es kann hierzu auch ein CAC-Programm missbraucht werden.
              Du meinst sicher CAD. Ich hab leider nur ein 3D CAD-Programm. Damit eine solche 2D Zeichnung zu erstellen ist so, als wenn ich mit dem Sattelschlepper zum Bäcker fahre
              Günther

              Comment


              • #22
                Hallo,

                Du meinst sicher CAD
                Ja. Da waren die Finger schneller als das Hirn

                meinst Du wegen der nicht normgerechten Darstellung?
                Nein. Eine normgerechte Darstellung ist nicht notwendig. Die Norm wäre wenn schon UML, aber als Norm würde ich das nicht bezeichnen eher als oft verwendeter Standard. Aber das ist nicht wichtig.

                Wichtiger wäre dass zu erkennen ist welche Schichten, Komponenten wie interagieren. Oder wie die Abläufe in einem Aktivitätsdiagramm (~Sequenzdiagramm) ausschauen. Eigentlich so wie im Video im Link eines vorigen Beitrag gezeigt wird.

                Dadurch kristallisieren sich dann mehr oder weniger automatisch die Schnittstellen für die Programmierung heraus. Aber das hab ich alles im 1. Beitrag schon geschrieben. Dort steht meine Vorgehensweise - die ich mir auch in Anlehnung an andere Architekten so zurecht gelegt habe.

                Die Darstellung kann eigentlich mit jedem Zeichenprogramm erstellt werden. Das ist irrelevant. Relevant ist die Information die dabei vermittelt wird.

                Auf die schnelle hab ich noch ein paar Links gefunden:


                mfG Gü
                Zuletzt editiert von gfoidl; 31.08.2010, 17:36.
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment

                Working...
                X