[NEWSboard IBMi Forum]

Thema: MVC und RPG

  1. #1
    Registriert seit
    Sep 2016
    Beiträge
    45

    MVC und RPG

    Hallo alle miteinander,

    ich beschäftige mich momentan nebenbei mit der Thematik MVC und RPG und wollte mal nachfragen wie ihr als erfahrene Entwickler/-innen MVC in RPG umsetzt. Sehr gerne auch mit Beispielen!

    Hier findet ihr mein ersten Versuch MVC in RPG umzusetzen, würde mich über reichlich (sachliche) Kritik freuen, denn ich bin mir mit MVC und RPG noch ziemlich unsicher und da mein Wissenstand nach 2,5 Jahren Ausbildung noch relativ gering ist freue ich mich immer über Tipps und Verbessrungsvorschläge.

    Header: http://pastebin.com/MJBgamY7
    MainPGM: http://pastebin.com/PLAQXGE5
    Model: http://pastebin.com/TJtZ8upt
    View: http://pastebin.com/N05ee7fW

    Bin gespannt auf eure Rückmeldungen

    Grüße
    Dominic

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    So auf die schnelle eine erste Anmerkung von mir. Du hast das alles sehr schön in wiederverwendbare Procedures gekapselt. Mir fehlt allerdings im Moment der Part, der die Ergebnisse der Funktionsaufrufe zum User bringt. Im Klartext: Wenn tief unten in einer deiner Prüfprozeduren ein Fehler auftritt: Wie bekommst du die Fehlermeldung dann in deinem Bildschirm?

    Es wird ja auf Dauer nicht reichen, von deinen Model-Routinen nur true oder false zu empfangen. Es müssen ja sprechende Fehlermeldungen geliefert werden, und ggf. auch gleich mehrere bei einer Prüfung. Wir machen das bei uns so, dass wir Prüfprozeduren für Datenstrukturen schreiben. Die bekommen als Input die Struktur der zu prüfenden Daten und geben eine "Plausi"-Struktur zurück, in der Feldname und Fehlermeldung steht. Im Display-Programm muss dann natürlich noch das Mapping zwischen Feldname des Prüfprogramms und Feldname in der Profound-Maske gemacht werden. (Wir haben an jedes interessante Feld im Bildschirm eine errMsg gehängt).

    Ich bin mir nicht sicher, ob unsere Programmstrukturen als MVC durchgehen würden. Aber eine prinzipielle Trennung von View und Logik ist ja systembedingt schon vorgegeben. Die DSPF (bei uns Profound) entspricht der "view". Unser RPG-Programm, dass das DSPF steuert, ist der "controller". Die Geschäftslogik unseres Datenmodells ist weitgehend in externe Programme (normale oder Serviceprogramme) ausgelagert. Diese ausgelagerten Programme könnte man als "model" bezeichnen.

    Das Ziel ist ja immer das gleiche, denke ich: Man will die Business Logik von der Präsentationebene trennen. Das ist (aus meiner Sicht) aber nicht vollständig möglich, da die Dateneingabe auf die Business-Logik prüfen muss und die Darstellung der Daten auch durch die Business-Logik beeinflusst werden. Beispiel: Die Business-Logik sagt: "Bei Erstbestellungen sind maximal 500 Euro zulässig". Das muss im Bildschirm irgendwie Berücksichtigung finden. Wir lösen das zwar durch unsere ausgelagerten Prüfroutinen, aber die View muss ja zumindest wissen, dass das Eingabefeld für den Betrag überhaupt geprüft werden muss. Das ist ja auch schon ein bisschen Business-Logik, finde ich.

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... verdammt anstrengend zu lesen das **free - dem Auge fehlt jegliche Orientierung die Grobstruktur zu erkennen (eine geschweifte Klammer ist auffallender als ein end-proc!)

    Das Model heißt zwar Model, sieht aber auf den ersten Blick stateless aus und müsste als Model aber den Prozessstatus jederzeit kennen.

    Ich gehe mal davon aus, dass der Controller das MainPGM sein soll: der muss die Daten kennen - sie sind dort deklariert, was dort nicht hingehört. Der müsste eigentlich generische Container makeln.

    Die View hat mehr als einen Export (=> Anzeigelogik wird von außen gesteuert. Typischerweise bekäme sie einen Datencontainer zur Anzeige und gibt einen anderen mit den Benutzereingaben zurück (in dem wäre dann auch die Fehlermeldung zur Anzeige, oder eine gedrückte F-Taste)

    Nicht unmittelbar MVC betreffend: Die Datenzugriffsschicht gehört aus dem Model rauszentralisiert.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Sep 2016
    Beiträge
    45
    @dschroeder:

    Jo das hast du Recht, das habe ich noch garnicht bedacht. Werde schauen das ich eine vernünftige Lösung für eine Fehlerprozedur finde. So wie du deine Programmstruktur beschreibst arbeiten wir momentan auch schon. *srvpgms enthalten die Geschäftslogik und das RPG Programm kümmert sich um den Rest.

    Das kamm mir nur nicht wie eine richtiges MVC Model vor, deswegen hatte ich versucht das auf eine andere Art zu versuchen. Was anscheined aber nicht wirklich von Erfolg gekrönt war wenn ich mir BenderDs Verbesserungen durchlese xD

    @benderD:
    Ich mag das. Finde ich viel angenehmer als die spaltenorintierte Schreibweise ; )

    Ich gehe mal davon aus, dass der Controller das MainPGM sein soll: der muss die Daten kennen - sie sind dort deklariert, was dort nicht hingehört. Der müsste eigentlich generische Container makeln.
    Ich verstehe nicht genau was du damit meinst, meine Daten sind doch ausgeglieder in ein *srvpgm. Dadurch kennt der Controller die Daten aber es ist im Programm selber kein Zugriff auf eine DB. Vllt. verstehe ich das ganze aber auch nur nicht richtig, den beim Rest deines Threads verstehe ich nicht wirklich was du meinst xD

    Vllt. magst/kannst du das für mich auf mein Niveau runterbrechen? : )

    Jedenfalls danke für euer Feedback. Würde mich freuen falls jemand noch eigenen MVC Quellcode bereitstellen kann. Ich finde das verdeutlicht und erklärt viel besser wie es funktionieren soll/kann ; )

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •