Announcement

Collapse
No announcement yet.

Architekturgedanken zur Portierung von WinForms-Anwendungen nach Silverligth

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

  • Architekturgedanken zur Portierung von WinForms-Anwendungen nach Silverligth

    [Edit=gfoidl] Das Thema wurde von Silverlight ListBoxItem.Tag abgetrennt. [/Edit]

    Hallo,

    was Florian vorhin geschrieben hat will ich nochmal aufgreifen. V.a. da ich irgendwie das Gefühl hab dass die ehemalige Winforms-Anwendung nur nach Silverlight portiert werden soll. Davon würde ich abraten. Es wird eine neue andere Technologie verwendet und da wärs auch ein gute Chance das Ganz mit einem weißen Blatt zu beginnen

    Ob du nun die Bücher liest od. nicht ist sicher dir überlassen. Ich lese für diese Thematik keine Bücher, denn es gibt im WWW so viel Themen dazu. Diese müssen gefiltert und aggregiert werden. Ein gutes Buch liefert die Info pädagogisch aufbereit. Das kommt halt auf den Typ der Person darauf an was einem lieber ist.

    Zuerst würd ich mir überlegen was der Benutzer haben will bzw. wie ist es am bedienungsfreundlichsten für ihn (-> Use Cases, ...)
    Hier könnte ich mir einen Assistenten vorstellen der mich als Benutzer durch die Auswahl und Berechnung begleitet. Am Ende kann ich die Konfiguraiton abspeichern und mit anderen bereits gespeicherten Konfigs. vergleichen.

    Wenn ich also erstmals weiß wie die Anwendung ausschauen soll - dabei ist noch keine einzige Zeile Code geschrieben worden - überleg ich wie und wo die Daten gespeichert werden sollen. Hier würde einen SQL Server (Express) auf dem Server haben wollen und zum Client mit dem XAP nur soviel wie unbedingt notwendig übertragen -> alles andere wird nachgeladen. Zum Nachladen brauch ich dann einen WCF-Wrappen um den DAL damit SL darauf zugreifen kann. So hab ich schon mal die Schichten und grob die Dienste der Anwendung definiert, aber immer noch keine Zeile Code geschrieben.

    Dann modularisiere ich die Anzeige in Views wo jede für sich ein Aufgabengebiet hat und keine einzige View eine EierlegendeWollmilchSau ist. Sonst wird übersichtlich. Die MainPage der Anwendung lässt sich ja wunderbar als Views (UserControls) zusammensetzen. Immer noch kein Code geschrieben.

    So nun habe ich die View(s) und den Datenzugriff. Dann gilts noch zu überlegen was zwischen beiden passiert. Ein klassischer BLL oder ein Muster der Art MVC, MVP, MVVM (sind alle irgendwie gleich). Hier würde ich eine Mischung von MVC und MVVM nehmen. Wenn das Model (die Daten) 1:1 von der Datenbank in die View kommen sollen ist kein ViewModel notwendig -> MVC. Andernfalls das ViewModel implementieren -> MVVM. Der Controler beim MVC ist beim MVVM in das ViewModel integriert. Wenn dich das verwirrt schau dir die Muster mal an.

    Wenn dann alles entworfen ist nochmal prüfen ob passt und ggf. nachbessern. Dann gehts an coden. Erstmals die Schnittstellen definieren und dann gleich entsprechend der Spezifikation die (Unit-) Tests schreiben. Damit vergisst man dann kein Detail der Spezifikation zu implementieren da der Test "nicht grün" wird.

    Sind alle Schnittstellen definiert kann ich in beliebiger Reihenfolge und unabhängig voneinander die einzelnene Teile ausprogrammieren und testen. Wenn alle Teile fertig sind gibts einen Integrationstest, usw.

    Dabei spricht nichts dagegen bestimmte Teile der alten Anwendung zu übernehmen. Voraussetzung hierfür ist halt dass diese Teile der alten Anwendung korrekt nach den OOP-Paradigmen entwickelt worden sind. Mit imperativen Dingen geht nicht - das wird dann eine Flickerei und da wärs besser das gleich gekapselt, wiederverwendbar, ... kurz OOP zu machen.

    Jetzt hoffe ich nur noch dass ich nichts wesentliches vergessen habe, denn wenn man es mal gewöhnt ist und das "instiktiv" funktinoiert ist es schwer das in Worten zu fassen


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

  • #2
    Günther, das ist die Vorgehensweise, wenn man alle zu verwendenden Programmiertools genau kennt.

    Wenn man aber so wie ich jetzt, Neuland betritt, dann will man doch erst einmal coden um die Stärken und Schwächen von sich selbst und dem Neuen herauszufinden. Und genau dann wenn ich ein Problem finde, das ich nach einer gewissen Zeit noch nicht selbst lösen konnte, stelle ich hier eine Frage.

    Im Moment programmiere ich ja noch nicht, ich will erst nur herausfinden ob ich stark genug bin, dem Auftraggeber eine Neuauflage anzubieten.

    Und ich finde es wahnsinnig toll, wie mir hier über die eigentliche Frage hinaus so umfassend geholfen wird.

    LG, Günther
    Günther

    Comment


    • #3
      Hallo,

      Im Moment programmiere ich ja noch nicht, ich will erst nur herausfinden ob ich stark genug bin, dem Auftraggeber eine Neuauflage anzubieten.
      aber genau da liegt das Problem begraben. Du versucht Silverlight an einem realen Projekt zu lernen. Das halt ich für nicht sinnvoll denn dabei schleichen sich Fehler ein und diese werden zur Gewohnheit -> Teufelskreis.

      Lies dir die Links durch die hier gegeben werden. Dabei lernst du auch WPF und Silverlight an Musterbeispielen. Wenn du diese verstanden hast und nachvollziehen kannst dann geh über zum realen Projekt -> dort ist es dann eher ein leichtes das gelernte umzusetzen und womöglich auf Fehler zu verzichten.

      Wenn du so willst stell ich dir ein paar kleine Aufgaben die du lösen sollst und dann beginne mit der richtigen Anwendung. Die Aufgaben wären:
      • Erstelle ein Fenster mit 3 Textboxen und einem Button. In die ersten beiden Textboxen werden vom Benutzer ganze Zahlen eingegen und nach dem Klick auf den Button die Summe in die 3. Textbox geschrieben. Löse die Aufgabe so dass eine saubere Trennung von UI und Logik vorliegt. Hilfestellung: Daten- und Commandbindung.
      • Erweitere die 1. Aufgabe so dass die Berechnung auf dem Server mittels WCF-Service erfolgt. Auch hier ist auf einen strikte Trennung der Anliegen zu achten.

      Das wären zu Beginn zwei Aufaben die trivial sind wenn man weiß wie aber ich denke alle wichtigen Prinzipien lassen sich an diesem einfachen Beispielen erlernen. Wie geschrieben es soll keine Berechnung in der Code-Behind durchgeführt werden.
      Erste wenn du diese Beispiel sauber gelöst hast und dir vorkommt dass du das drauf hast beginne mit was richitgen. Die Lösungen kannst du hier gerne posten damit ich die kontrolliern und Feedback geben kann (wenn du willst).
      Das war übrigens meine Vorgehnsweise beim WPF- und SL-Lernen

      wenn man alle zu verwendenden Programmiertools genau kennt.
      Das beschriebene Vorgehen ist tw. ziemlich allgemein und wird dann spezieller. Das stimmt. Wenn dir dabei etwas neu vorkommt dann wäre es mit den Stichworten Zeit sich das anzueignen. Vor allem da du ja selbst willst es perfekt zu machen. Meine Antwort sollte nur der Hinweis sein wie ich es machen würde und zum aktuellen Zeitpunkt für ideal ansehe (wie Florian aber auch geschrieben hat ändert sich das "Ideal" laufend).


      mfG Gü


      PS: Mir ist bewusst dass das alles sehr offtopic zur eigentlichen Frage ist, jedoch von sehr substantieller Natur und daher passt es schon wieder. Ich muss mal überlegen wie ich das sinnvoll abtrennen kann (oder Florian übernimmt das - denn ich gehe jetzt eine Runde mit dem Rad fahren )
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Was ich übrigens sehr empfehlen für Screen Prototypen ist Balsamiq Mockups. Damit lassen sich sehr einfach sehr schnell GUI Prototypen erstellen. Damit geht man dann zum Kunden und frägt ob er damit klar kommen würde oder was er denn gerne anders hätte.
        Daraus erstellt man dann die Anforderungen ans Programm. Gerade wenn man schon eine ältere Software hat macht es doch oft auch Sinn vielleicht auch mal einen neuen Workflow oder ähnliches auszuprobieren. Falls vorhanden kann man das ganze auch mit Sketchflow machen. Dort kommt man allerdings schon sehr leicht in Versuchung zu genau ins Detail zu gehen. Genau das soll es nicht sein.

        Was die Schichtentrennung angeht, bin ich leider selbst immer noch am Lernen was jetzt wo hingehört und man das alles am Besten zusammen baut

        Comment


        • #5
          Hallo Florian,

          danke für den Link. Das kannte ich nicht. Bisher entweder bessere Handskizzen oder in letzer Zeit Sketchflow (mit genau dem von dir angesprochenen Problem ).

          ad Schichtentrennung: Bei MVC, MVP, MVVM ist das auch nicht mehr so klar. Der DAL existiert eigentlich immer. Wo aber nach klassichen Schichten die BLL und UI liegt teilt sich irgendwie auf. Leichter ist die Entscheidung wenn du in Tiers (also physische Schichten) denkst. D.h. kann ich eine Komponente auf einen anderen Server laufen lassen? Falls nein was müsste geändert werden damit das möglcih ist? So als ganz einfache grobe "Faustregel".


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            @Günther: Gern geschehen. Ich find das Tool super genial Ich hätte Dich eigentlich auch noch fragen sollen ob Du auf den Open Space in Karlsruhe kommst. Das wär echt genial gewesen. Der nächste ist im Herbst in Leipzip, aber das ist Dir wohl zu weit. Aber jetzt wieder Schluss mit Offtopic

            Zum Thema:
            Schwierig ist die eigentlich Schichtrennung eigentlich nicht, wenn man ein einfaches Beispiel hat. Aber ich habe auch schon in ein paar Programmen versucht das umzusetzen und irgendwie scheiterts immer wo anders.
            Wie mach ich z.B. meine DAOs? Packe ich in jede Instanz nur eine Id bzw. eine Liste von Ids der referenzierten Objekte rein oder die Objekte direkt selbst. Bei einem Objektbaum von 3500 Objekten will das gut überlegt sein
            Dann gehts weiter. Für die Datenabfrage baue ich in den BLL mehrere GetIrgendwas Methoden rein, die die Anfrage an die DB weiterleiten. Wie gestalte ich dann die Save Methode? Für welche Objekte baue ich eine BL Klasse? Für welche Entities baue ich eine Dal? Welche kann ich mit einem vorhandenen speichern. Wie baue ich das GUI Framework und wie kommunizieren diese miteinander. Ich sehe schon irgendwie Licht am Ende des Tunnels, aber so ganz hab ichs noch nicht verstanden. Wie gesagt vor allem in größeren Projekten Klingt alles immer einfach, aber bei mir hakts trotzdem noch hier und da. Günther wirds da wohl ähnlich gehen. Auch wenn er vielleicht noch nicht ganz so weit ist wie ich.

            Comment


            • #7
              Hallo,

              Günther wirds da wohl ähnlich gehen.
              Das bezieht sich wohl auf Günther die in diesem Thema aktiv sind

              Das Problem liegt einfach darin dass jede Aufgabe anders und speziell ist. Daher gibt es keine allgemeinen Weg. Aber das ist ja auch ein Grund dass (gutes) SW-Entwickeln keine Fließbandarbeit ist und somit bleibt es spannend und reizvoll. Mir gehts auch so wie du oben geschrieben hast: Was vor 1 Monat noch super war würde ich jetzt ev. schon wieder (leicht) anders machen. Jeden Tag gibts neue Erkenntnisse - jeden Tag was neues lernen - ich finde das super

              Somit kann ich dir auch kein Lösung für deine Fragen geben da es einfach nicht möglich ist. Sagt dir aber Unit of Work etwas? Das hat bei mir persönlich auch irgendwie einen Hype - weils praktisch ist und transaktionales Verhalten (auch in Verbindung mit Commands) relativ einfach möglich ist.

              Der nächste ist im Herbst in Leipzip,
              Mal schauen ob ich das mit einer Dienstreise verbinden kann - würde mich aber auch freune uns mal zu treffen


              mfG Gü

              PS: Jetzt muss ich einfach ein neues Thema daraus machen. Mit der Ursprungsfrage hat rein gar nichts mehr zu tun.
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Natürlich gibt es dafür kein universalrezept, aber es gibt doch Situationen wo eine Lösung der anderen vorzuziehen ist, denn sonst gäbs ja doch wieder die eine Lösung.
                Ich kenn diese ganzen Patterns natürlich, das Problem sind ja nicht die Patterns an sich, sondern wie ich diese ganze Pattern zusammenbaue. Gott sei Dank kenne ich den Leiter der UserGroup Ingolstadt recht gut und der hilft mir jetzt ein kleines Projekt mit richtiger Architektur aufzuziehen. Ich denke das hilft mir schon sehr weiter mal ein kleines Projekt SELBST unter Beobachtung umzusetzen. Ich denke das ist das Beste was einem passieren kann. Hier auf der Arbeit gibt es leider auch niemanden der so richtig objektorientiert programmieren kann, deswegen muss ich mir alles im Alleingang beibringen. Das erleichtert die Sache natürlich auch nicht gerade.

                Open Space ist normalerweise übers Wochenende deswegen weiss ich nicht ob Du das mit einer Dienstreise vereinbaren kannst. Der letzte in Karlsruhe war aber super. Aber es wäre natürlich Klasse wenn man sich mal treffen könnte. Hier mal noch der Link:
                http://netopenspace.de/2010/

                Comment


                • #9
                  Hallo,

                  Leiter der UserGroup Ingolstadt
                  Gregor Biswanger? Kenn ich nur indirekt von einem Forum

                  Bezüglich Architektur hab ich am meisten von den Gedanken von Ralf Westphal bzw. dessen Blogs gelernt. Gottseidank teilt er seine Überlegungen mit der Welt! Er hat mehrere Blogs die du aber leicht findest.
                  Mircosoft hat ein "Architecture Guidance" (oder so ähnlich) das finde ich aber nicht besonder aussagekräfit. Wenn ein "Buch" schon mit einem Kapitel beginnt wie ich es zu lesen habe...naja ist halt für Amis gemacht Außerdem ist jedes Kapitel mehr oder weniger nur ein Wiederholung des Vorkapitels, usw. Ein Blick lohnt sich aber doch.

                  Es gibt leider sehr wenige Demo-Projekte die eine gute Architektur aufzeigen und dabei noch überschaubar sind. Meiner Meinung nach liegt das daran dass viele denken sie könnens, aber dem ist oft nicht so. Darum sind diese Demos oft Ungetüme.
                  Die Beispiele von Ralf Westphal oder Martin Fowler sind allesamt sehr überschaubar und auf das wesentliche konzentriert und v.a. zeigen sie gute Architektur. Die beiden wissen halt wovon sie schreiben und haben auch die nötige Erfahrung.

                  Das oben ganannte Beispiel der Addition 2er Zahlen sollte so ein überschaubares Beispiel sein. Ist zwar Overkill das so umzusetzen, aber man lernt dabei.

                  Architektur lernt mar aber nur mittels Erfahrung. Daher bin auch (noch) kein guter Architekt


                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Ja natürlich. Ich hab auch schon viel dazu gelernt. Ich beschäftige mich jetzt seit ca 1,5 Jahren mit richtig objektorientierter Softwareentwicklung. Sowas existierte bei uns vorher gar nicht. Und die Sachen sind natürlich mittlerweile auch wesentlich handlicher als damals

                    Ja Gregor Biswanger der hilft mir momentan bei dem Projekt. Allerdings sind wir derzeit noch bei Anforderungsanalyse und Prototypen Erstellung. Deswegen auch der Link auf Balsamiq mit Verweis auf Sketchflow.
                    Ich kenne auch die Fowler Bücher. Wie gesagt die einzelnen Patterns erscheinen mir auch vollkommen logisch. Aber das ganze zusammenzusetzen schaff ich dann doch immer irgendwie nicht. Meist scheiterts dann echt an ganz banalen Problemen.
                    Mag auch sein, dass das für viele Beispiele overengineered ist. Aber soooo viel Aufwand ist ja nun normalerweise auch nicht gleich.
                    Z.B. muss ja die Konfiguration des Programms nicht immer mittels IoC Container erfolgen. Ein paar Factories die am Anfang des Programms aufgerufen werden reichen für ein kleines Programm auch.
                    Genauso brauch ich zum Zahlen addieren auch nicht einen riesigen BLL mit diversen Services. Aber ich muss sagen ich baue lieber mal etwas komplexer (zumindest von der Architektur her) als dass ich hinterher wieder alles umreissen muss.

                    Comment


                    • #11
                      Hallo,

                      hab gerade einen interssanten Link passend zum Thema gefunden. Das will ich dann natürlich nicht vorenthalten.

                      Clint Edmonson hat eine Serie von Blogpost über Architektur (v.a. mit VS 2010 Architecture Tools) erstellt. Beginnend mit diesem hier.


                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        Die Headlines machen schon Lust auf mehr Leider kann ichs in der Arbeit nicht anschauen, aber ich werds mir zuhause mal zu Gemüte führen.

                        Dank Dir!!!

                        Momentan schau ich mir mal ein klein wenig Prism an. StockTrader wäre prinzipiell auch sehr interessant, aber ich hab grad einen neuen Rechner bekommen und möchte nicht den ganzen Mist drauf haben. Vor allem verlangt das Ding unbedingt nen IIS -.-

                        Comment


                        • #13
                          Hallo,

                          hast du VS 2010 Ultimate? Wenn nicht sind die im Blog angehängten Projekte nicht sehr nützlich, aber ich könnte dann die Modelle als Bilder exportieren und hier anhängen. Muss aber noch klären ob das lizenzrechtlich eh passt.

                          Edit: Clint Edmonson war so freundlich und hat mir die Veröffentlichung hier gestattet. Da es aber viele Bilder sind und nicht in den Anhang passen können sich interessiert per PN bei mir melden um einen Weg zu finden.


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

                          Comment


                          • #14
                            Ja ich hab VS Ultimate Gregor Biswanger wurde letztens MVP und da hat er mir eine Subscription zukommen lassen. Ich hab das also sogar ganz legal

                            Comment


                            • #15
                              Ja legal habs ich auch


                              mfG Gü
                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                              Comment

                              Working...
                              X