Aufbau eines Systems mit mehreren Dialogschritten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aufbau eines Systems mit mehreren Dialogschritten

    Hallo,

    ich bin mit einem eigentümlichen Problem konfrontiert. Ich entwickle ein System, das über mehrere Dialogschritte hinweg Daten sammelt, die ich in Session-Variablen zwischenspeichere. Ist alles gesammelt und verifiziert, wird in eine MySQL DB gespeichert. Den Dialogablauf steuere ich über Buttons die ich entsprechend abfrage ($_REQUEST["buttonname"]). Ich habe bisher alles in eine einzige PHP-Datei reincodiert, die inzwischen etwa 100 KB gross ist. Bislang funktionierte dies prächtig. Nachdem ich nun aber einige weitere Funktionsblöcke dazucodiert habe, funktioniert plötzlich die Dialogsteuerung nicht mehr, konkret, es werden Sequenzen durchlaufen, die zu anderen Buttons gehören. Die Buttons werden richtig gesetzt (den Button-Inhalt habe ich mir per echo anzeigen lassen). Meine Fragen:
    1. Ist es denkbar, dass PHP ein Problem mit großen PHP-Dateien hat?
    2. Wenn nicht, wie komme ich dem Problem auf die Spur (ich entwickle mit Eclipse, habe aber noch nie mit dem DEBUG Mode gearbeitet)
    2. Sollte ich generell bestimmte Funktionsblöcke auslagern und nur bei Bedarf includen, damit die Datei klein bleibt?
    3. Oder sollte ich aus demselben Grund für jeden Dialogschritt eine eigene PHP-Datei machen?

    Danke für Eure Tips

  • #2
    1. Nein
    2. vll. durch auskommentieren
    3. Am besten du lagerst alles in eine Klasse aus und machst für jeden Block eine Methode
    4. blos nicht.
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      Re: Aufbau eines Systems mit mehreren Dialogschritten

      1. Nein, mit 100kB absolut nicht!
      2. echo __LINE__; von vorn bis hinten durch den Code schieben, bis mal was ausgegeben wird, was du nicht erwartet hast?
      2./3. Abwägen zw. Lesbarkeit des Codes und Performance.

      PS: Wenn deine Dialogschritte ähnlich nummeriert sind wie deine Fragen, hab ich das Problem schon gefunden.

      Kommentar


      • #4
        Klassen benutze ich bereits für alle Funktionselemente, die mehrfach vorkommen. Wenn ich deinen Rat umsetze stellt sich deshalb folgende Frage:
        Kann ich in einer Methode einer Klasse andere Methoden derselben Klasse aufrufen?

        rgds

        Kommentar


        • #5
          Original geschrieben von Stonebreaker62
          Kann ich in einer Methode einer Klasse andere Methoden derselben Klasse aufrufen?
          NEIN. Das wäre ja total gegen OOP

          Logisch geht das $this->my_function();
          Sunshine CMS
          BannerAdManagement
          Borlabs - because we make IT easier
          Formulargenerator [color=red]Neu![/color]
          Herkunftsstatistik [color=red]Neu![/color]

          Kommentar


          • #6
            ich würde für jeden Dialogschritt ein separates include machen im gemeinsamen Rahmenscript. Ferner würde ich Hilfsfunktionen auslagern. Ein Programm von 100KB, entsprechend 3500 Zeilen, am Stück ist im Editor gefährdet. Bei separaten includes wird die Verschachtelungstiefe geringer, Files die nicht offen sind, können nicht vertippt werden, die Ueberprüfung von Kopf bis Fuss, bzw. spätere Wartung ist bei angenommenen 500 Zeilen pro Dialogschritt einfacher, und es zwingt zu einem etwas formelleren Protokoll der Verwendung.

            Kommentar


            • #7
              das heisst, ich codiere eine Klasse, die die Elemente der Ablaufsteuerung enthält und eine zweite Klasse, die alle Methoden enthält, die aus der ersten Klasse heraus aufgerufen werden?

              so etwa?
              if (isset ($_REQUEST['button1'])) {
              $steuerung->macheSchritt1 ();
              }
              if (isset ($_REQUEST['button2'])) {
              $steuerung->macheSchritt2 ();
              }
              ......

              Klassendefinition:
              class steuerung {
              function macheSchritt1 () {
              $ausfuehrung->machewasAnderes();
              }
              function macheSchritt2 () {
              code
              }
              }

              class ausfuehrung {
              function machewasAnderes () {
              code
              }
              }

              Kommentar


              • #8
                Frage zu Nix_wie_weg Ansatz. Bei Dir saehe es dann so aus?


                if (isset ($_REQUEST['button1'])) {
                include ("schritt1.php!):
                }
                if (isset ($_REQUEST['button2'])) {
                include ("schritt2.php!):
                }

                Kommentar


                • #9
                  halbwegs. Du vergisst aber ,dass wenn der Benützer Button2 gedrückt hat, du zweikommafünf Dingetun musst.

                  1. die eingaben von button2 plausibilieren und zwischenspeichern
                  2. die maske für button3 ausgeben.
                  2. die maske für button2 ausgeben.

                  Hat Benützer aber button3 gedrückt, so musst du folgende zweikommafünf Dinge tun:
                  1. die eingaben von button3 plausibilieren und zwischenspeichern, bzw. falls die Schritte vollständig sind, abspeichern
                  2. die maske für button4 ausgeben.
                  2. die maske für button3 ausgeben.

                  Falls es umfangreich ist, würde ich z.B. das gleiche button3.php sogar zweimal inkluden und dort mit einem internen if den 1. bzw. 2. Schritt auseinanderhalten.

                  Das andere, mit einer Klasse, ändert am Umfang des Haupt-php-Skripts überhaupt nichts, und es braucht nicht mal eine klasse dazu, gewöhnliche Funktionen würden auch gehen um den Code zu strukturieren.


                  [edit: warum zweikommafünf??
                  man muss drei Schritte im Script haben, nämlich 1., 2. und 2.
                  Verarbeitet werden aber nur zwei, nämlich 1. 2. oder 2.
                  Macht im Durchschnitt zweikommafünf.]
                  Zuletzt geändert von nix_wie_weg; 10.08.2006, 13:10.

                  Kommentar


                  • #10
                    Original geschrieben von mir
                    Falls es umfangreich ist, würde ich z.B. das gleiche button3.php sogar zweimal inkluden und dort mit einem internen if den 1. bzw. 2. Schritt auseinanderhalten.
                    Diese Anordnung im includeten Script für zB Button2 erlaubt sogar im Skript, zuerst den <form> Teil zu haben und nachher den plausi() Teil, entgegen der Verwendung. Gemacht habe ich es aber noch nie, da ich nicht so aktiv bin.

                    Kommentar


                    • #11
                      klar, dass ich die Eingaben validieren muß und abhaengig vom Ergebnis die alter oder neue Maske ausgebe. Das mache ich in jedem der jeweiligen Includes.

                      Wuerdest due die Steuerungsbuttons in die Includes kodieren oder ins Hauptscript?

                      Kommentar


                      • #12
                        Also ist folgender Aufbau optimal, wenn ich ein groesseres System entwickeln muß (hinsichtlich Übersichtlichkeit und Performance)?

                        Klar, dass ich innerhalb der Include-Bloecke auch strukturiere und mit Klassen/Funktionen arbeite.

                        if (isset ($_REQUEST['button1'])) {
                        include ("schritt1.php"):
                        }
                        if (isset ($_REQUEST['button2'])) {
                        include ("schritt2.php"):
                        }

                        schritt1.php:
                        db connect
                        if isset (submitButtonSchritt1) {
                        --validierung Form von Schritt 1
                        --if valide {
                        -----Ergebnisse Schritt 1 in Session-Variablen speichern
                        -----echo Ausgabe Schritt 2 Maske
                        -----echo Button Schritt 2
                        -----db close
                        -----exit;
                        --} else {
                        -----echo Ausgabe Schritt1 Maske (mit fehlermeldungen)
                        -----echo Button Schritt 1
                        -----DB close
                        -----exit;
                        }
                        HTML (PHP embedded): Ausgabe Schritt 1 Maske
                        DB close

                        Kommentar


                        • #13
                          Hallo, koennte mir einer der Moderatoren noch einen Kommentar zu den beiden Empfehlungen geben?

                          Alternative1: für jeden Dialogschritt eine Methode in einer Klasse codieren;
                          Alternative 2: abhaengig vom Dialogablauf entsprechende Code-Sequenzen includen) .

                          Welche Variante wuerdet Ihr bevorzugen?
                          Habe ich die jeweils richtigen richtigen Schluesse aus den Empfehlungen gezogen ?

                          Kommentar

                          Lädt...
                          X