Design-Notes für PHP-Anwendungen?
Design-Notes für PHP-Anwendungen?
am 07.01.2005 18:04:23 von Walter Kerelitsch
Hallo Gruppe,
ich sinniere nun schon einige Zeit über den sinnvollen Aufbau von
PHP-Scripts. Konkret geht es mir um den vernünftigen Aufbau einer Anwendung,
die sich über einige (ca. 10) Webseiten erstreckt.
Daher meine Fragen:
1) Ist es sinnvoll, die gesamte Anwendung in *einem einzigen* Script
ablaufen zu lassen und darin die gesamte Transaktionssteuerung vorzunehmen?
Oder bin ich besser dran, wenn ich den Code an die jeweiligen Seiten
'anhänge'?
2) In beiden Fällen stehe ich vor der Problematik der Variablenübergabe:
Gibt es nur ein einziges Script, werde ich sinnvollerweise Funktionen
verwenden, um modular arbeiten zu können - dabei muss ich aber in jeder
einzelnen Funktion alle benötigten Variablen global definieren - hmm.
Sind es mehrere Scripts, muss ich meine Variablen (soweit ich das bis jetzt
verstanden habe) in den folgenden Forms als hiddenfields übergeben - auch
jede Menge Aufwand und störungsanfällig.
Besonders stört mich hierbei, dass die Notwendigkeit besteht, Daten aus
einer MySQL-DB auszulesen, die ich auf der nächsten Seite wieder benötige
(und somit neuerlich auslesen muss?).
3) Und wie steht das ganze im Zusammenhang mit sessions? Ich habe schon
einige gute Tutorials darüber gelesen, aber die Sinnhaftigkeit zu meinem
o.e. Problem entzieht sich mir. Da ja auch mit sessions der Zugriff auf
(globale) Variablen mühsam ist.
Wie löst Ihr solche Sachen? Kennt Ihr ein gutes Projekt im Web, wo derlei
Dinge ersichtlich sind?
MfG Walter
Re: Design-Notes für PHP-Anwendungen?
am 07.01.2005 19:59:29 von Johannes Vogel
Hi Walter
Du scheinst es aber sehr genau zu nehmen mit deinem Projekt. Gut so. :)
Walter Kerelitsch wrote:
> ich sinniere nun schon einige Zeit über den sinnvollen Aufbau von
> PHP-Scripts. Konkret geht es mir um den vernünftigen Aufbau einer Anwendung,
> die sich über einige (ca. 10) Webseiten erstreckt.
> Daher meine Fragen:
> 1) Ist es sinnvoll, die gesamte Anwendung in *einem einzigen* Script
> ablaufen zu lassen und darin die gesamte Transaktionssteuerung vorzunehmen?
> Oder bin ich besser dran, wenn ich den Code an die jeweiligen Seiten
> 'anhänge'?
Das ist eine Konzeptfrage. Ich persönlich bevorzuge die Struktur wie
folgt zu handhaben:
Für jede Seite sein eigenes Script. Diese verwenden aber Sessions, um
Daten auszutauschen und inkludieren Bibliotheken, um auf gemeinsame
Codefragmente zuzugreiffen. Damit bin ich äusserst flexibel und brauche
nicht die eigentliche Seite als Parameter anzugeben.
> 2) In beiden Fällen stehe ich vor der Problematik der Variablenübergabe:
> Gibt es nur ein einziges Script, werde ich sinnvollerweise Funktionen
> verwenden, um modular arbeiten zu können - dabei muss ich aber in jeder
> einzelnen Funktion alle benötigten Variablen global definieren - hmm.
> Sind es mehrere Scripts, muss ich meine Variablen (soweit ich das bis jetzt
> verstanden habe) in den folgenden Forms als hiddenfields übergeben - auch
> jede Menge Aufwand und störungsanfällig.
> Besonders stört mich hierbei, dass die Notwendigkeit besteht, Daten aus
> einer MySQL-DB auszulesen, die ich auf der nächsten Seite wieder benötige
> (und somit neuerlich auslesen muss?).
MySQL ist durchaus schnell. Die gleichen Daten mehrmals auszulesen wird
dein Script kaum in die Knie zwingen.
> 3) Und wie steht das ganze im Zusammenhang mit sessions? Ich habe schon
> einige gute Tutorials darüber gelesen, aber die Sinnhaftigkeit zu meinem
> o.e. Problem entzieht sich mir. Da ja auch mit sessions der Zugriff auf
> (globale) Variablen mühsam ist.
> Wie löst Ihr solche Sachen? Kennt Ihr ein gutes Projekt im Web, wo derlei
> Dinge ersichtlich sind?
Du hast den Sinn von Sessions noch nicht begriffen. Zwischen zwei
Aufrufen von Scripts befindet sich einzig und allein die Session zur
Datenübergabe. Falls du auf Sessions verzichtest, weiss das eine Script
nichts vom anderen. Ausser aber du übergibst die Daten eben jedesmal
über POST oder GET-Variablen. Das willst du aber nicht, deshalb
speicherst du bereits gesammelte Daten in der Session und übergibst
jeder Seite nur die Angabe, welche Session-ID denn verwendet wird.
HTH, Johannes
Re: Design-Notes für PHP-Anwendungen?
am 07.01.2005 22:21:12 von Axel Schwenke
"Walter Kerelitsch" wrote:
> Hallo Gruppe,
>
> ich sinniere nun schon einige Zeit über den sinnvollen Aufbau von
> PHP-Scripts. Konkret geht es mir um den vernünftigen Aufbau einer Anwendung,
> die sich über einige (ca. 10) Webseiten erstreckt.
Vorab: du hast die Funktionsweise von Webanwendungen nicht verstanden.
Im Gegensatz zu "normalen" Anwendungen, gibt es da kein Programm, das
so lange läuft wie der Benutzer mit der Applikation arbeitet, sondern
die Applikation läuft sozusagen in Raten: Für jeden Seitenaufruf läuft
ein Teil der Applikation. Die Laufzeit ist dabei gleich der Wartezeit
aus Sicht des Anwenders (genau gesagt läuft das Programm los, wenn der
HTTP-Request des Benutzers komplett da ist und endet mit dem Absenden
des letzten Zeichens der Antwort).
> Daher meine Fragen:
> 1) Ist es sinnvoll, die gesamte Anwendung in *einem einzigen* Script
> ablaufen zu lassen und darin die gesamte Transaktionssteuerung vorzunehmen?
> Oder bin ich besser dran, wenn ich den Code an die jeweiligen Seiten
> 'anhänge'?
Das ist in o.g. Kontext absolut unerheblich. Typische Programmierstile:
1. Jede Seite ist ein einzelnes PHP-Skript und implementiert alles
selber (außer Standard-Bibliotheks-Funktionen).
2. Die gesamte Applikation ist in Form von Funktionen in einem Include-
file konzentriert. Jede Seite ist ein eigenes PHP-Skript, das dieses
File includiert und lediglich Funktionen daraus aufruft.
3. Ein Mittelding aus 1. und 2. Typischerweise wird häufig benutzte
Funktionalität in Includefiles ausgelagert.
> 2) In beiden Fällen stehe ich vor der Problematik der Variablenübergabe:
> Gibt es nur ein einziges Script, werde ich sinnvollerweise Funktionen
> verwenden, um modular arbeiten zu können - dabei muss ich aber in jeder
> einzelnen Funktion alle benötigten Variablen global definieren - hmm.
> Sind es mehrere Scripts, muss ich meine Variablen (soweit ich das bis jetzt
> verstanden habe) in den folgenden Forms als hiddenfields übergeben - auch
> jede Menge Aufwand und störungsanfällig.
Da zwischen Seitenaufrufen kein Skript läuft, kannst du so auch keine
Variablen aufbewahren. Hidden Fields sind "Bähh", vor allem weil sie
Manipulationen Tür und Tor öffnen. Die Antwort lautet -> Sessions.
> Besonders stört mich hierbei, dass die Notwendigkeit besteht, Daten aus
> einer MySQL-DB auszulesen, die ich auf der nächsten Seite wieder benötige
> (und somit neuerlich auslesen muss?).
Und? Die vielleicht 10 Sekunden zwischen zwei Seitenaufrufen des
gleichen Nutzers sind für deinen Rechner Ewigkeiten. Zudem ist MySQL
recht schnell. Teuer (oder gar nicht) wiederbeschaffbare Daten kommen
in -> die Session.
> 3) Und wie steht das ganze im Zusammenhang mit sessions? Ich habe schon
> einige gute Tutorials darüber gelesen, aber die Sinnhaftigkeit zu meinem
> o.e. Problem entzieht sich mir. Da ja auch mit sessions der Zugriff auf
> (globale) Variablen mühsam ist.
Eine Session ist ein Datencontainer, der die Zeit zwischen Seitenauf-
rufen überdauert. In Verbindung mit PHP ist die Session einfach ein
globales Array, das du zum Ablegen von Daten benutzen kannst.
XL
Re: Design-Notes für PHP-Anwendungen?
am 09.01.2005 20:22:44 von Abitos Schrelb
Walter Kerelitsch wrote:
[...]
>
> MySQL ist durchaus schnell. Die gleichen Daten mehrmals auszulesen wird
> dein Script kaum in die Knie zwingen.
>
Stimmt, macht bei vielen Zugriffen schon Probleme. Kukt euch doch mal
das PEAR Package Cache_Lite an. Dieses Paket ist einfach und effizient
zu Nutzen.
http://pear.php.net/package/Cache_Lite
Zum Thema Anwendungsdesign fällt mir spontan phpPatterns.com ein:
- The Front Controller and PHP
http://www.phppatterns.com/index.php/article/articleview/81/ 1/1/
mfg Tobias
--
Alle eMails an die genannte Adresse landen in /dev/null
Kontaktinfos auf www.schrelb.de
Re: Design-Notes für PHP-Anwendungen?
am 09.01.2005 22:43:12 von Walter Kerelitsch
danke für Eure infos!
lg walter