Christian K: Projekt strukturieren

Hi,
ich bin gerade dabei ein ziemlich umfangreiches und mehrsprachiges  PHP-Projekt zu entwickeln. Es muss sehr sicher sein, hat Datenanbindung, Loginbereiche, etc. Eben das ganze Programm.

Ich bin mir im Klaren, das die Entwicklung von so etwas ziemlich viel Zeit in Anspruch nimmt.

JETZT MEINE PROBLEM:
Es klingt zunächst relativ banal, stellt für mich allerdings ein Problem dar.
Wie organisiert man so etwas auf der Serverebene?

  • Wo sollte was gespeichert werden. (Ordnernamen)
  • Worauf sollte man achten, damit die Pflege hinterher nicht zur Qual wird.
  • Was soll eine Documentdatei aufgebaut sein.
        Also welche Dateien sollten am Besten im jeweiligen PHP file gespeichert werden... Welche "geincluded" ...Welche automatisch generiert?

Ich weis das diese Fragen irgendwie allgemein und schlecht greifbar sind. Vielleicht kennt jemand ja ein Website mit einem oder mehreren Beispielen von Projektstrukturen umfangreicher Seiten.
Oder kann ein bisschen was aus dem Nähkästchen plaudern.

Ich würde mich über euren Antworten freuen.

Gruss
Christian

  1. Das ist natürlich ein breites Feld für welches zu beantworten manche viele Jahre Informatik studieren.

    Allgemein gelten ein paar Bauernregeln:

    • Achte darauf deinen Code nicht per Copy & Paste an stellen duplizieren zu müssen. Wenn du dann was änderst, und das wirst du, geht die Sucherei los.
    • Schreibe deine Seite in Funktionen, besser in Klassen (wobei solche Projekte dann nur mit PHP5 sinnvoll nutzbar sind, PHP4, das auf vielen Webservern installiert ist macht da noch Schwierigkeiten)
    • Kommentare! Schreibe dir immer dazu was du hier machst, weil früher oder später vergisst du es.

    Ansonsten: Mach dir einen Plan. Was muss in die Version 1 rein und was kommt später. Zu viel auf einmal verurteilt dich schon im voraus zum Scheitern. Und nicht einfach drauf los hackern. Ohne Konzept geht gar nichts.
    Und: Gleiches zu Gleichem. Wenn du wild drauf losspeicherst wirst du mit deiner Ordnerstruktur nicht mehr glücklich. Mache zum Beispiel einen Ordner, der deine Klassen speichert etc.

    Viel Erfolg.

  2. echo $begrüßung;

    ich bin gerade dabei ein ziemlich umfangreiches und mehrsprachiges  PHP-Projekt zu entwickeln.
    Vielleicht kennt jemand ja ein Website mit einem oder mehreren Beispielen von Projektstrukturen umfangreicher Seiten.

    Eine gute Struktur ist hilfreich beim Überblick behalten. Besonderes Augenmerk sollte man dabei der Trennung von Zuständigkeiten widmen. Welcher Teil kümmert sich welche Teilaufgabe. Kann man diese Teilaufgaben generalisieren? Oftmals wiederholt sich das zu Erledigende mit geringfügigen Änderungen. Copy&Paste ist für eine spätere Wartung nicht unbedingt das Ideale. Don't repeat yourself (DRY) lautet eins der Programmiermottos.

    Ziemlich beliebt ist die Trennung der grundsätzlichen Aufgaben gemäß MVC-Muster.

    Zwei Beispiele für Web-Frameworks:

    Für PHP 5 versucht gerade das Zend Framework sich zu einem Standard zu entwickeln. Das Handbuch ist leider nach Klassen sortiert. Für den generellen Überblick könntest du dir Zend_Controller und Zend_View anschauen. Weitere Dokumentation und Links findest du in der Developer-Bereich.

    Auch interessant kann ein Blick über den Tellerrand sein. Django ist ein Web-Framework mit etwas anderem Ansatz. Es interpretiert MVC etwas anders als üblich und macht daraus ein MTV (Model-Template-View). Django ist zwar in Python geschrieben, und du wirst vielleicht den Code nicht direkt verstehen können, aber die Dokumentation beschreibt recht gut, die hinter diesem Projekt steckende Philosophie und Strukturierung als Übersicht und ausführlicher im Tutorial.

    echo "$verabschiedung $name";

  3. Hellihello Christian,

    Wie organisiert man so etwas auf der Serverebene?

    Möglich ist, einen "testing", einen "online" und eine "archive" Bereich zu haben, damit du erstmal sowas wie eine Versionsverwaltung hast. Eigene Ordner in den httpdocs können das sein, auf die Du dann via .htaccess routest.

    Innerhalb dann Data und View in eigenen Ordner (oder eben Datenbank).

    Zudem wäre ggf. zu überlegen, ob die Benennung der Seiten eine Rolle spielt, denn das sind ja auch gleich die Stichworte für Suchen.

    • Wo sollte was gespeichert werden. (Ordnernamen)

    Mh, hast Du eine Datenbank, oder willst Du die Daten serialisiert ablegen? Ein Ordner pro User mit "seinen Sachen" darin scheint wohl eine sinnvolle Möglichkeit.

    • Worauf sollte man achten, damit die Pflege hinterher nicht zur Qual wird.

    Es gibt neben DRY noch YAGNI (You aint gonna need it) und KISS (keep it simple stupid). Im Grunde vielleicht vier Grundklassen nehmen.

    • Der Speicher kennt die Datenstruktur und führt die crud-Methoden aus.
    • Die View verwaltet die einzelnen Templates (Formulare, Anzeigen).
    • Die Control macht das "wiring", also schaltet die URL/Formularanfragen weiter an die Speicher(Schreib/Lese)funktionen. Eventuell steht dem Controller noch ein Validator und ein Generator zur Seite.
    • Dein Datensatz ist dann noch eine Klasse (z.B. User) mit einer ID, inhaltlichen Daten und vielleicht Metadaten. Du könntest also zB. in $user->data['name'] den Namen abspeichern, in $user->meta['name']['required'] die Info, ob das Ding zwingend ausgefüllt sein muss.
    • Was soll eine Documentdatei aufgebaut sein.

    Was soll das sein?

    Also welche Dateien sollten am Besten im jeweiligen PHP file gespeichert werden... Welche "geincluded" ...Welche automatisch generiert?

    Vielleicht ein HTML-Grundgerüst, in dem die Titel, Metas, und Body als Variablen eingesetzt sind. Diese werden dann vorher gesetzt, am Ende das Gerüst eingebunden.

    Für den Body dann nochmal eigene Templates, nach dem selben Muster.

    Ich weis das diese Fragen irgendwie allgemein und schlecht greifbar sind.

    Nein, sie sind greibar. Das ist wie die Architektenskizze beim Hausbau. Physisch greifbar machen lässt sich das auch mit CRC-Cards.

    Vielleicht kennt jemand ja ein Website mit einem oder mehreren Beispielen von Projektstrukturen umfangreicher Seiten.

    Oder kann ein bisschen was aus dem Nähkästchen plaudern.

    Weitere Webtipps fänd ich auch prima. Ein rechtes Projektstrukturbuch o.ä. konnt ich auch noch nicht finden. RUBY on RAILS hat da wohl auch ein eigenes beeindruckendes Framework. Aber dafür brauchst Du dann wegen der Randbedingungen wohl am besten einen eigenen Server. Das mit dem Webhosting ist natürlich die Vorbedingung für alles.

    Gruß,

    frankx

  4. Vielen Dank für eure ausführlichen Antworten. Haben mir auf jeden Fall geholfen. (Muss das erstmal alles in meinem Hirn ordnen)

    Gruß

    Christian

    1. Hellihello Christian,

      (Muss das erstmal alles in meinem Hirn ordnen)

      Genau das isses.

      Gruß,

      frankx