Neuigkeiten:

still alive...

Hauptmenü

Meinung zu einer Designidee

Begonnen von k00ni, 14. August 2008, 13:04:30

Vorheriges Thema - Nächstes Thema

k00ni

Hallo,
ich arbeite gerade an einem neuen Projekt. Darin werde ich Smarty verwenden und habe mir deshalb eine neue Struktur für die gesamten Seite überlegt.
Bisher war es ja so, dass man für jede Funktionalität eine Seite hatte. Dies möchte ich brechen und mache für jeden \"Bereich\", bspw. eine Userverwaltung, eine Klasse, welche man instanziiert und dann mittels $foo->display (); einbindet. (die Funktion bindet dann ein Smarty-Template ein.)
Man hat also nur noch eine \"Seite\", die index.php. Diese bekommt per Adresszeile, dass zu ladente Modul übergeben und lädt dieses über die entsprechende Klasse. Ich hoffe, dass ich mich verständlich ausgedrückt habe.
Bitte um Kritik und Anregungen! /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
 
Grüße

Powie

Jo vielleicht kann dir mahe mal sein Konstrukt zeigen, das baute sich ähnlich auf.

k00ni


Powie


Original von k00ni Was hälst du davon?
[/quote]
Die Idee hatten andere schon vor dir, denn viele System funktionieren so  /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" /> . Kann so schlecht also nicht sein deine Idee  /uploads/emoticons/icon_e_wink.gif.c059000ae48ff64afa53be0962c021f2.gif\" alt=\":wink:\" />

mahe

Das hab ich aber irgendwann im Archiv verstaut.
Ein Grund dafür waren die Panels, da musst ja für jedes Panel die komplette Klasse starten.
latest News, latest Threads, online User, uswusf.
Is imo ein ziemlicher Overhead /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


k00ni

Hallo,
könntest du das genauer beschreiben? Was meinst du mit Overhead? Um wieviele Klassen ging es grob und was war daran das Problem?
Ich hab eigentlich nur eine Klasse die sich um ein Modul kümmert und somit einen Bereich darstellt. Also bspw. eine Klasse für die Verwaltung von Personen. Diese deckt zudem noch das Erstellen / Ändern etc. ab. Das rund herum wird durch einfache Templates gemacht.
Bis auf diese Klassen (die bei mir Module genannt werden), hab ich noch lib-Klassen, welche bspw. Datenbankfunktionalität zur Verfügung stellen. Ich finde diese Idee schon recht gut, nur würde mich halt die Praxisrelevanz interessieren und wo die Flaschenhälse sind.
 
Grüße

mahe

So wie du das beschreibst gehe ich davon aus dass du:
eine Klasse für News
eine Klasse für User
eine Klasse für Forum
eine Klasse für PNs
...
usw. hast.
Wenn du nun links oder rechts auf der Seite Panels hast musst du ja für das Newspanel die Klasse starten, für das PN-Panel, uswusf.
Dabei brauchst du ja eigentlich in den meisten Fällen nur ein Query um an die Daten zu kommen -> Overhead.
Userklasse wirst du immer brauchen wegen dem Login, oder machst du das dann wieder extra?
Man lädt da halt auch relativ viel unnötiges mit.
So wie ich das verstanden hab hast du das so vor.

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


Powie

ja, aus diesem Grunde gefällt mir momentan der Speicher Konsum von pSys auch nicht, je mehr Modular das ganze ist, umso mehr sinnlos Speicher wird verbraten für Dinge die immer und immer wieder vorkommen. Bsp die ganzen Smarty Instanzen...

k00ni

Die Frage ist jetzt für mich, ob man die angesprochenen Dinge überhaupt anders lösen kann. Denn wenn mans modular aufbaut, dann gehts scheinbar nicht anders, als dass man bei jedem \"Modul\" auch die zugehörige Klasse läd. Ist\'s ein Panel, so kann man dies ja auch als direkten Plain-SQL schreiben und muss nicht die Klasse bemühen.
Overhead hin oder her. Bei mir arbeiten gleichzeitig vlt. 3 Leute. Da ist es wurscht ob das Ding etwas mehr oder weniger verbraucht. Nur ich verstehe nicht, was an den paar Klassen so Overhead-lastig sein soll.  
Bei mir ist das grob gesagt folgendermaßen strukturiert:
Eine index.php welche als \"Struktur\" dient. Sie wird immer geladen. Am Anfang required sie die config.php. Diese wiederum required, wenn man sich nicht gerade auf der login-Seite befindet, die check_user.php welche den User authentifiziert.
Dann kommt die head.php. (gleiches Prinzip wie bei Powies kopf-fuss-System). Die wird ein Template einbinden und vlt. die css- und javascript-Dateien.
Dann kommt eine switch, welche je nach übergebenem Modulnamen dass jeweilige Modul lädt. Es wird dann im case-Zweig eine Instanz des Moduls aufgerufen und eine execute-Funktion. Den Rest überlasse ich dann dem Modul.
Am Ende folgt das Require der foot.php und fertig.
Habe mir das so aufgebaut, dass intern Klassen vorhanden sind, welche jeweils Funktionen für den Umgang mit Tabellen darstellen (create, update, ...) und diese dann in der Modulklasse eingebunden werden. Weiterhin gibts eine zentrale Datenbankklasse. Ich spreche hier durchschnittlich von 3 - 4 Klasseninstanzen pro Pageload. Wobei das Projekt zur Zeit erstmal noch in den Kinderschuhen steckt.
 
Grüße

mahe

Overhead -> Jede Funktion die geladen wird aber nicht gebraucht wird
Du sagst es ja selber, das steckt noch in den Kinderschuhen, aber was wenn es da raus wächst? /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Alternativ könnte man für jedes Script/Modul (wie du es nun auch immer nennen willst ^^) eine Klasse modul_panel schreiben.
Die enthält dann nur das was das Panel braucht bzw. die div. Möglichkeiten (neue Threads, letzte Posts, Top Threads, ...)
Dann greift man bei mehreren Panels von einem Modul zumindest immer auf die gleiche Klasse zu.
Oder eine Klasse für die Panels die alles zur Verfügung stellt /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Oder das ganze per Plugins realisieren /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


Das, was k00ni hier beschreibt, ist als http://en.wikipedia.org/wiki/Front_Controller_pattern\" rel=\"external nofollow\">Front Controller Pattern bekannt und wird auch schon lange verwendet. Dementsprechend ist auch ausreichend Literatur zum Thema verfügbar.

k00ni

Wäre das nicht auch ein Modell was für pSys interessant wäre? Damit werden alle Teile modularer, man kann durch die Objektorientiertung vieles wiederverwenden und es gibt einen Tick mehr Abstraktion bezüglich Datenbank, Verarbeitung der Daten, interne Logik und Ausgabe ( Struktur, Inhalt ). Die Frage ist, ob das Sinn macht?

Die Frage ist, ob das Sinn macht? [/quote]
Das tut richtig sein. Schlecht übertragener Anglizismus.
Ja, es ist sinnvoll, bekannte und etablierte Pattern zu verwenden, vorallem da das PSys ansonsten eher Kraut und Rüben ist. Es würde die Entwicklung deutlich vereinfachen, wenn man definierte Punkte hätte, an denen man Modifikationen durchführen muss.

k00ni

Hallo,
ich habe es so eingerichtet, dass es für jede Tabelle eine Klasse gibt. Diese managed den Umgang mit dieser. Die Klasse X ist von einer Klasse table abgeleitet, welche Grundfunktionen bereitstellt, wie check_and_escape_array, insert_into, update_by_id, delete_by_id usw. . Gibt es dafür auch irgendein Pattern? Könnte man dass vielleicht weiter vereinfachen oder an andere Dinge anbinden?
Die Frage stellt sich nun, da ich hier eine Zeitbereichsabfrage in einer Tabelle mache. Für Zeit- und Datumskram hab ich eigentlich eine eigene Klasse, die damit nichts zu tun hat.

all your base are belong to us