dedlfix: Ordnung in den Datenhaufen

Beitrag lesen

Ich bin immer noch nicht davon überzeugt, dass du dir mit dem großen Datenhaufen einen Gefallen tust. Es wird auch nicht besser, wenn du den großen Datenhaufen erst auf Überflüssiges hin auswertest, um dann die den kleineren Datenhaufen nach anderen Kriterien auszuwerten.

Ja, lieber wäre mir auch ich müsste nicht alles
unnötige (leere Arrays/werte) über den Browser senden.
Aber leider fällt mir keine Alternative ein und so leistet
mir diese Funktion jetzt doch schon Einiges an Scriptreduzierung.

Nein nein, dies ist nicht dein eigentliches Problem. Ich hab noch mal über dein Problem im Ganzen nachgedacht. Du möchtest eine Simulation mit jeder Menge Eingabeparameter programmieren. Das sieht, deiner Schilderung der jetzigen Datenstruktur nach, sehr umfangreich aus. Deswegen ist es wichtig, die Übersicht bewahren zu können, spricht eine Ordnung hineinzubringen und die ganze Sache gut vorzubereiten, damit du nicht auf halbem Wege feststellen musst: Alles Sch...lecht geplant! Und dann alles in kleinen Schritten zusammenbauen, das ergibt dann viele kleine Erfolgserlebnisse und die sind auch wichtig! :-)

Lassen wir mal die Auswertung der Eingabeparameter außen vor und betrachten die ganze Geschichte aus der Benutzerseite.

Teil 1 - Der Anwender
---------------------

Auch ihm mutest du zu, sich durch einen riesigen Berg von Optionen zu kämpfen. Das stelle ich mir ermüdend und wenig erbaulich vor. Wie soll das ablaufen, wenn er die Simulation ein weiteres Mal mit etwas geänderten Daten ausführen möchte? Sollen dann nicht vielleicht die vorigen Änderungen gleich erhalten bleiben, so dass er nur wenig anzupassen hat? Vielleicht merkt er auch gar nicht, dass er eine Option vergessen hat, die er vorhin schon drin hatte. Das erfordert auch auf seiner Seite eine hohe Konzentration, aber eigentlich will er sich ja auf die Simulation und deren Ergebnis konzentrieren.

Du solltest als erstes einmal deine Parameter sinnvoll gruppieren. (Denk jetzt nicht an die Auswertung, die kommt später.) Welche Parameter gehören zusammen? Hier gilt es den besten Kompromiss zwischen der Anzahl der Gruppen und der Anzahl der Optionen pro Gruppe zu finden. Gegebenenfalls musst du da Untergruppen verwenden.

Gruppe A
   Option A.1
   Option A.2
   ...
Gruppe B
 Untergruppe B1
   Option B1.1
   Option B1.2
   ...
 Untergruppe B2
   ...
Gruppe C
   ...

Wenn du diese Struktur hast musst du dir Gedanken machen, wie die Navigation für den Anwender aussehen soll (auch hier die Auswertelogik erstmal außen vor lassen). Für jede Options-Gruppe erhält der Anwender eine eigene Seite. Wenn er die Seite ein weiteres Mal aufruft, findet er seine eben gemachten Einstellungen wieder vor und kann weitere Änderungen vornehmen. Das gleiche passiert auf den anderen Seiten. Natürlich müssen diese Eingaben irgendwo zwischengespeichert werden. Und vielleicht soll er seine Daten auch morgen wieder vorfinden, wenn er weitersimulieren will...

"Start der Simulation" sollte ein eigener Menüpunkt sein. Mehr dazu später.

Welche weiteren Funktionalitäten sind aus Sicht des Benutzers sinvoll?

Wenn du das alles zusammengetragen hast, kannst du schon mal von der Theorie in die Praxis wechseln und die Benutzeroberfläche zusammenbauen. Dass bestimmte Funktionalitäten noch nicht implementiert sind, ist dabei erstmal nebensächlich. Schnickschnack kommt später. Erstmal muss für den Anwender im Groben erkennbar sein, was er alles tun kann.

Teil 2 - Die Simulation
-----------------------

Nun musst du die Simulation genauso sorgfältig planen. Welche Aufgaben gibt es zu erfüllen? Kann man diese Teile sinnvoll kapseln? Welche Parameter benötigt welcher Teil? Welches Ergebnis produziert er? Welche Daten müssen von einem Teil einem anderen übergeben werden? _Wie_ diese Kommunikation/Parameterübergabe zwischen den Teilen stattfinden soll, ist im Moment nicht so wichtig. Nur das: _Wer_ kommuniziert _was_ mit _wem_? Dabei ist ein direktes Übergreifen eines Teiles in einen anderen unbedingt zu vermeiden, spricht: der eine darf keine Parameter des anderen direkt manipulieren. Auch nicht, wenn es sich um globale Dinge handelt. Wenn das notwendig ist muss eine globale Instanz mit eingeplant werden, die sich darum kümmert. Jeder Teil darf also nur Aufgaben an einen anderen Teil weiterdeligieren. Dazu kann er Parameter übergeben und bekommt gegebenenfalls wieder etwas zurück.

Teil 3 - Funktionalitäten
-------------------------

An dieser Stelle kann ich dir nur grob die Richtung weisen, wie das eine oder andere zu implementieren geht.

Zum Zusammentragen der Eingabe-Optionen und zum Zwischenspeichern zwecks späterem Wiederverwenden bieten sich in PHP Sessions an. Hier muss es erst einmal darum gehen, die Daten einzusammeln und für andere Programmteile bereitzustellen. Eine Auswertung erfolgt nur für die Richtigkeit der Eingabedaten. Wird eine Zahl erwartet wird nur überprüft, ob es eine ist und ob der Wertebereich stimmt. Sind Pflichtfelder innerhalb der Gruppe ausgefüllt? Stimmen die Abhängigkeiten innerhalb der Gruppe? Sind Abhängigkeiten gruppenübergreifend zu prüfen, ist sicher die Gruppenaufteilung nicht richtig gewählt. Dann solltest du lieber das korrigieren als zu kompliziertes Übergreifendes behandeln zu wollen.
Stimmt alles kannst du die Optionsgruppe für diese Seite als geprüft markieren.

Nachdem der Benutzer die Daten zusammengetragen hat kann er die Simulation starten.
Hier erfolgt zunächst eine Prüfung ob alle Optionsgruppen als korrekt markiert sind. Dann kann der Hauptteil der Simulation starten und die entsprechenden Aufgaben samt Parametern an die einzelnen Teile zur Ausführung geben, die Ergebnisse einsammeln, diese weiterreichen und so weiter und so fort. Irgendwann ist alles berechnet und kann zur Ausgabe gebracht werden.

Teil 4 - Die Werkzeuge
----------------------

An dieser Stelle habe ich Bedenken dir bestimmte Sachen zu empfehlen, da ich dich so einschätze, dass du noch nicht genügend Programmier- im allgemeinen und PHP-Erfahrung im speziellen hast.

Für die Optionsformulare bietet sich eine Technik namens "Affenformular" an. Das ganze gibt es ausgereift im PEAR-Paket HTML_QuickForm (Kurzanleitung, leider nur in englisch). PEAR wird teilweise bei der Installation von PHP bereits mit installiert.

Das kümmert sich um die Formulardarstellungs- und Eingabelogik inklusiver gewisser Prüfungen (Pflichtfelder etc.). Es liefert die Eingaben als Array, und dieses kann man auch später wieder so wie es ist dem Formular zur erneuten Bearbeitung übergeben.
Du kannst das so nutzen, indem du dieses Array in der Session speicherst und wenn der Benutzer die Formularseite erneut aufruft kannst du ihm seine früheren Eingaben wieder vorsetzen, und das alles mit übersichtlichem Programmieraufwand.

Ich hoffe dir damit den "richtigen" Weg gezeigt zu haben, wie du dein umfangreiches Projekt für dich und für andere übersichtlich gestalten kannst.
Und noch eine Bitte: Bringe etwas Ordnung in deinen Quelltext. Verwende Einrückungen, so wie es beispielsweise in dem Affenformular-Beispiel der Fall ist. Das erhöht die Lesbarkeit, deine Projektquelltextleser und Helfenden werden es dir danken.

dedlfix