Christian Kruse: Web-Programme modular aufbauen

Beitrag lesen

Hallo Andreas,

Hm. Ich dachte man hat ein Programm, welches halt modular
aufgebaut ist(was auch immer das jetzt heißt), und das
komplette Programm hat Schnittstellen um mit der Außenwelt
kommunizien zu können, das dachte ich immer.

Plugins (oder Module, wie du es nennst) sind Teile der
Aussenwelt.

Gut, aber darunter kann ich mir jetzt _nichts_ vorstellen.
Was wäre das denn praktisch?

Das kommt auf dein Programm an :) Software-Design ist zwar
viel allgemeines, aber wenn es an Schnittstellen geht, wird
es anwendungsspezifisch.

Interne Schnittstellen kann ich mir nur schwer vorstellen.
Schnittstellen wozwischen? Zwischen den Modulen?

Ja.

Aber dazuwischen findet doch im Prinzip kein
Datenaustausch statt, alle Module greifen auf dieselbe
Datenquelle zurück.

Tja, aber die Datenquelle ist nicht alles. Z. B. sind
Variablen-Inhalte meist durch den Programmablauf bestimmt.

Nochmal zu den internen Schnittstellen, ein Problem ist
z.B. das Menü. für jedes neue Modul brauche ich meist
mind. einen Menüeintrag. Bisher habe ich eine Menüleiste,
in der die Menüs als link fest reingeschreiben sind.

Dann mach doch hier einen Punkt, an dem sich die Module
einhaken koennen. Jedes Modul, dass geladen wird, hat z. B.
eine Funktion/Methode 'menu' und gibt eine Struktur zurueck,
die die Menue-Struktur des Plugins beschreibt. Der Menue-Teil
macht dann daraus das HTML.

Plane voraus: Alle Dinge müssen sich dynamisch
erledigen lassen.
Was sind "alle Dinge"? Wo fängt "alle Dinge" an und wo
hört das auf?

Alles, was Funktionalitaet in sich birgt, muss dynamisch
geschehen. Alles, was mit dem Design zusammenhaengt, kann
statisch sein.

Menüs sind zum Beispiel nicht fest codiert, sondern
werden durch deine Module definiert. Das bedeutet,
dass beispielsweise jedes Modul eine Funktion besitzen
könnte, die einen Menüeintrag zurückliefert,
Aber wie mache ich das? Das ist wie im obigen Beispiel
eine eigene Datei. Wie mache ich jetzt der Menüleiste klar
das diese Datei ab heute ebenfalls abgefragt werden soll?

Da gibts verschiedene Strategien. Einige lesen ein Verzeichnis
aus, in dem alle Module liegen muessen, anderen arbeiten mit
Konfigurations-Dateien. Ich halte zweiteres fuer sinnvoller.

Und woher weiß ich vorher wie die Funktion heißen wird?

Entweder, du gibst das vor (das ist gar nicht so selten, das
wird sehr oft gemacht. Bei OO waere das ein typisches
Konstrukt fuer Vererbung: die Elternklasse wuerde die
Schnittstelle in Form einer abstrakten Klassen darstellen und
die Kind-Klasse wuerde sie implementieren) oder du hast eine
Konfigurations-Variable, in der Referenzen gespeichert sind.

Oder sollte man an Stelle eines Array für das ganze
Projekt lieber einzelen Dateien einführen, also pro Datei
eine Sprachdatei mit dem festen Sprach-Array nur mit den
Strings für diese eine Datei?

Halte ich fuer gut und sinnvoll, ja.

Allerdings: Daten werden üblicherweise in Datenbanken
gespeichert, und es ist durchaus möglich, das Programm
so zu gestalten, dass es sich dynamisch an das derzeit
verwendete Datenformat anpaßt und gewisse Dinge dann
eben nicht zur Verfügung stellt - bzw. erst nach und
nach einpaßt.
Hm? Wie soll das gehen? Nenn bitte mal ein Beispiel.

Du kennst if()s? :)

Nur das man sich durch sowas vermutlich leicht
Fehlerquellen einbaut, oder?

Ja. Das Datenformat ist IMHO etwas, was bestehen bleiben
*muss*.

Die eierlegende Wollmilchsau wirst du nicht
programmieren, aber gewisse Dinge sind fürs
Funktionieren unbedingt erforderlich - alles weglassen
geht also auch nicht. Aber irgendwie ist ja nichts
greifbar fest, wenn alles dynamisch ist. Das kriegt man
wahrscheinlich am besten hin, indem man erstmal
irgendwas Festes programmiert, was dann dynamisiert
wird.

Nein! Bitte nicht :) Aus so einem "Konzept" enstehen die
ekeligsten Codes.

Ich kann dir, wenn du moechtest, mal ein Konzept fuer eine
PHP-basierte Groupware, die ich gerade schreiben muss,
darlegen. Mach ich jetzt aber so nicht ungefragt, das gibt
ein laengeres Posting...

Gruesse,
 CK