Etwas groesseres Projekt, wie verwalten?

Hallo liebes HaBo,

ich bin momentan dabei, eine etwas groessere Homepage zu erstellen. Es handelt sich um eine themenbasierte Seite, geplant ist recht viel Inhalt und einer Community. Ich kann leider kaum einschaetzen, wie viele Klicks sie am Tag zu verkraften hat.
Diese Seite soll Funktionen wie ein Newssystem und eine Benutzerverwaltung mit Profilen besitzen.
Seitens Programmieraufwand trau ich mir das Projekt zu, jedoch bin ich nach fast 40kb geschriebenem Code am ueberlegen, ob ich das ganze plaette und nochmal von Vorne anfange.

Mein Code ist zwar nicht der schlechteste, aber professionell ist was anderes. Zum einen will ich die ganze Seite doch objektorientiert gestalten und zum anderen sind mir Zend und Smarty aufgefallen. Bisher trenne ich Markup, Code und Daten mit einer einfachen Funktion, die im Prinzip nur Strings einsetzt ( :] ).

Ob ich wieder bei null beginne haengt von folgenden Fragen ab:
1. Was ist eure Meinung zu Projekten wie Zend oder Smarty bei etwas groesseren Seiten?
2. Welche Erweiterungen wuerdet ihr mir empfehlen?
3. Habt ihr gute Tips/Links fuer die Entwicklung einer komplexeren PHP-Anwendung wie die Homepage? Ich lese mich schon durchs Netz, aber wenn ihr grad zufaellig was auf der Zunge habt: immer her damit ;)
4. Sollte man bei der Groessenordnung schon mit Entwicklertools (UML, FlowChart oder aehnlichem) arbeiten?
5. Lohnen IDEs bei soetwas oder ist das eher wenig sinnvoll? Bisher schreib ich alles mit VIM unter Windows.

Vielen Dank schonmal im voraus,
snoggo
 
1. Für größere Projekte ist ein gutes Template-System Pflicht. Ob du selbst eins schreibst oder Smarty nimmst, ist eigentlich egal. Über Zend kann ich nicht viel sagen
2. SimpleXML ist ganz nett und mysqli bzw. PDO macht für größere Datenbanken durchaus Sinn.
3. Ich würde stark objektorientiert programmieren und Spaghetti-Code um jeden Preis vermeiden. Mach viele Kommentare. Achte gleich von Anfang an auf mögliche Schwachstellen in der Sicherheit (alle(!) Benutzereingaben vorher prüfen/escapen, alle Variablen sauber initialisieren, wenig Globals)
4. UML ist hilfreich. Solltest du für größere Sachen ruhig einsetzen. Kaum Arbeit, aber viel Übersicht
5. Auf jeden Fall! Ich arbeite gerne mit Eclipse, hab aber auch schon gute Erfahrungen mit anderen IDEs gemacht. Aptana, Zend, Dreamweaver sollen gut sein.

Noch ein paar Tips:
6. Versuch dich mit regulären Ausdrücken vertraut zu machen. Für String-Manipulationen/-Interpretationen gibt es kaum was Mächtigeres.
7. Gewöhn dir ne saubere (X)HTML Strkutur an. So sieht man logische Fehler im Code viel schneller und kann besser in der Ausgabe lesen.
8. Wenn es geht, versuche auch gute URLs hinzubekommen. Das Apache-Modul mod_rewrite kann "schöne" URLs so interpretieren, dass dein Script den Aufruf versteht. Damit hast du in Suchmaschinen bessere Chancen und kannst zum Testen auch mal einen bestimmten Aufruf ohne von Script erzeugten Link machen
9. Teste viel und oft. Man übersieht leicht triviale Fehler, die erst in bestimmten Situationen auftreten

Viel Erfolg mit deinem Projekt!

mfg, metax.
 
Original von snoggo
1. Was ist eure Meinung zu Projekten wie Zend oder Smarty bei etwas groesseren Seiten?
Mit Smarty hab ich keine Erfahrung, aber Zend solltest du bei grossen Projekten mit vielen Klicks definitiv vermeiden. Es frisst enorm Performance. Beispiel: Der Aufruf von 50-60 Userprofilen pro Sekunde, bei deren Generierung die Zend-Engine verwendet wurde, sorgte bei uns dafür, dass ein Webserver mit 2GB RAM, SCSI-Platten und 2x2.5GHz bei einer Loadavg von >20 und einer CPU-Last von 80% auf beiden Kernen stand. Seitdem das Skript von der Zend-Engine gelöst wurde, liegt die Serverlast bei 0.5 bis 1 und die CPU-Last bei 4-8%.

Original von snoggo
2. Welche Erweiterungen wuerdet ihr mir empfehlen?
Mehr als PDO würde ich nicht einsetzen. Zuviele Erweiterungen können Code auch unübersichtlich machen. Ausserdem musst du dich in jede relativ intensiv einarbeiten, damit du weisst, was im Hintergrund deines CMS abläuft. Bei vielen Klicks macht auch der Einsatz von Memcaching oft Sinn.

Original von snoggo
3. Habt ihr gute Tips/Links fuer die Entwicklung einer komplexeren PHP-Anwendung wie die Homepage? Ich lese mich schon durchs Netz, aber wenn ihr grad zufaellig was auf der Zunge habt: immer her damit ;)
Schau dir die Quelltexte von mehr oder weniger grossen CMS wie Joomla, Mambo, PHPWebsite usw. an. Vielleicht ist es sogar sinnvoller, wenn du deine Entwicklungsleistung in vorhandene Projekte steckst. Die Programmierung eines eigenen CMS für eine Community ist ein enormer Aufwand und die meisten CMS bieten eigentlich die notwendigen Funktionalitäten.

Original von snoggo
4. Sollte man bei der Groessenordnung schon mit Entwicklertools (UML, FlowChart oder aehnlichem) arbeiten?
Ja, und vor allem gut dokumentieren. Sonst verlierst du irgendwann den Überblick. Auch die Verwendung einer Versionsverwaltung dürfte sinnvoll sein.

Original von snoggo
5. Lohnen IDEs bei soetwas oder ist das eher wenig sinnvoll? Bisher schreib ich alles mit VIM unter Windows.
Definitiv lohnen IDEs. Sie ersparen dir durch Code-Vervollständigung, Klassen-Wizards usw. eine Menge Tipparbeit.

@metax.: mod_rewrite frisst sehr viel Server-Performance. Man sollte es daher vorsichtig und so wenig wie möglich einsetzen, wenn man viele Klicks erwartet.
 
Vielen Dank fuer die hilfreichen Antworten und Tips :)

Ich werde mir dann mal Smarty anschauen und Zend weglassen. Bei der Datenbank ueberlege ich mir noch, welche ich benutze. Die erste Version der Seite hatte ich mit SQLite gemacht, was mir aber ehrlich gesagt zu umstaendlich ist, da es keine vernuenftigen Tools gibt wie PHPMyAdmin.
Ich pendele zwischen MySQL und MySQLi. Einige sagen MySQLi sollte man schon bei PHP5 und MySQL > 4.1 nehmen, andere sagen es bringt nichts sondern schadet nur der Performance. Habt ihr da Meinungen zu?
PDO kenne ich, habe ich mit SQLite benutzt, um SQLite 3 benutzen zu koennen. Werde es weiterbenutzen.

Das mit dem Rad neu erfinden... Ehrlich gesagt ist das glaube ich so ne kleine Macke bei mir, ich greif nicht gern auf fertige Dinge zurueck. Zum einen moechte ich gerne jedes Detail genau kennen und zum anderen hab ich Spass an den Problemen, die waehrend der Entwicklung auftreten ;)

Dann gibts jetzt noch zwei Fragen von mir ;):
1. MySQL vs. MySQLi vs. andere DB: was nehmt ihr, warum nehmt ihrs?
2. Welche IDEs? Eclipse ist fuer Java, wie gut ist die PHP-Erweiterung? Irgendwie kann ich mir nicht vorstellen, dass das angenehm ist, wenn did IDE fuer eine andere Sprache geschrieben ist.
 
Eclipse ist keineswegs nur für Java, aber ich finde auch, dass ihnen der Spagat der Multilanguage-GUI genauso misslungen ist wie bei KDevelop u.a.

Wenn du irgendwie rankommst oder es nicht unbedingt kostenlos sein muss, schau dir die Zend-IDE an.
 
Generelle Tipps:

- Verwende ne Versionsverwaltung, das erleichtert dir die Arbeit an einem grossen Projekt ernorm, auch wenn nur du alleine dran arbeitest.
- Zum Punkt eins ist es ganz Sinnvoll ne IDE/Editor mit Unterstützung für ne Versionverwaltung zu verwenden ;)
- Template System macht bestimmt Sinn, allerdings reicht da meist ein eigens, du weisst was es kann und können musst und kannst es zur not erweitern.
- Wichtiger als ein Template System ist wohl bei einer grossen Community ein gescheites Cache System. So das einige Teile Statisch sind und nur alle x Sekunden oder auch Minuten durch ein ein Script neu generiert werden. Z.b. ne Forenübersichtsseite... die muss ja nicht immer 100% aktuell sein es reicht wenn du in etwa weisst wieviele Leute schon geantwortet haben / wie gross das Interesse ist.
 
Original von bitmuncher
Eclipse ist keineswegs nur für Java, aber ich finde auch, dass ihnen der Spagat der Multilanguage-GUI genauso misslungen ist wie bei KDevelop u.a.
Ich persönlich benutze zwar Eclipse recht selten (eigentlich nur für die wenigen Java-Projekte die ich mal entwickle), aber wie gesagt, ist Eclipse lange nicht mehr nur für Java-Projekte vorgesehen. Eclipse ein ganzes Framework, welches natürlich Open Source ist. Am Sonntag durfte ich im Kongresszentrum Karlsruhe bei der OpenExpo einem interessanten, englischen Vortrag lauschen, der das Thema Eclipse hatte. Es hat mich doch sehr überrascht, wie das Projekt gewachsen, wenn nicht sogar "ausgeartet" ist. Ich habe Eclipse bisher nur ab und zu als IDE verwendet und wusste nicht, dass sich so viel entwickelt hat. Zum einen gibt's die allseits bekannten Plugins für C/C++ und andere Sprachen und das ganze System basiert auf Rich-Client, was eine effektive und relativ einfache Gestaltung von Plugins ermöglicht. So kommt auch die Web-Programmierung nicht zu kurz: PHP, Python, HTML, Perl finden Unterstützung.
Ich entschuldige mich, falls das zu sehr vom Thema abweicht, aber ich wollte das "Potenzial" des ganzen Eclipse-Projekts einfach nur erwähnt haben, auch wenn meiner Meinung nach das ganze immer mehr in den kommerziellen Bereich abrutscht, obwohl beim Vortrag ziemlich genau das Gegenteil behauptet wurde, aber nun ja, das von meiner Seite.

Das nur der Vollständigkeit halber.

Standfeste Erfahrungen habe ich mit Eclipse bzgl. der Web-Programmierung (Java sozusagen ausgenommen) jedoch nicht. Ich würde eher zu IDEs greifen, die auch in erster Linie dafür vorgesehen sind, wie die genannten Produkte Zend oder Dreamweaver.
 
also als ide für php benutze ich hauptsächlich zend und php designer und bin mit beiden eigentlich sehr zufrieden. von php designer soll es auch eine kostenlose version geben. inwieweit die dann aber in den funktionen eingeschränkt ist konnte ich so auf die schnelle nicht herausfinden
 
Die Entwicklungsumgebung ist Geschmackssache. Ich fliege auf Eclipse mit der entsprechenden PHP-Erweiterung, die für Windows und Linux verfügbar ist.
Ich lege dir Klassendiagramme ans Herz. UML mag ich eigentlich gar nicht und diese ganzen Use-Cases sind für Leute die lieber malen als programmieren aber Klassendiagramme sind echt wichtig! Baue dir eine gut überlegte Datenbankstruktur auf und lass dir dann deiner Datenbankstruktur entsprechend mit einem Script direkt PHP-Klassen erzeugen. Das musst du natürlich auch schreiben und es ist ein bisschen Arbeit, dafür musst du nicht jede Klasse per Hand tippen und vorallem kannst du per Script Aufruf deinen Code nachher bequem ändern wenn zum Beispiel neue Features anstehen.
(Wird es deutlich was ich meine?^^)
Da sind wir eigentlich auch schon beim wichtigstem Thema. Halte deinen Code so Modular wie möglich.

ADOdb macht überigens auch ziemlich phun.
 
Ich lege dir Klassendiagramme ans Herz. UML mag ich eigentlich gar nicht und diese ganzen Use-Cases sind für Leute die lieber malen als programmieren aber Klassendiagramme sind echt wichtig!

Nicht nur Use-Cases gehören zur UML, auch Klassendiagramme gehören zur UML / UML2, und ist eines der Strukturdiagramme.

Baue dir eine gut überlegte Datenbankstruktur auf und lass dir dann deiner Datenbankstruktur entsprechend mit einem Script direkt PHP-Klassen erzeugen

Für sowas gibts auch ein nettes Online Tool, und zwar hier
 
Original von weau
Baue dir eine gut überlegte Datenbankstruktur auf und lass dir dann deiner Datenbankstruktur entsprechend mit einem Script direkt PHP-Klassen erzeugen.

hmm... ich mach das irgendwie genau andersrum: ich code meine Klassen per Hand (da weiß ich wenigstens, was drin steht...) und habe eine protected Funktion mk_db_structure() und lass dort alle Tabellen, die die Klasse benötigt, erstellen...


noch ein Tipp:
ich weiß nicht, in wie weit du dich mit Java auskennst... da gibt es spezielle Syntax für Kommentare, damit mittels java-doc automatisch eine Dokumentation draus wird....

So etwas gibt es auch für PHP, nennt sichPHPdocumentor

Das erleichtert die Arbeit echt um einiges, wenn du eine Klasse, die du lange nicht benötigt hast, mal wieder verwenden willst - da brauchst du dich nicht durch den gesamten Code wühlen, sondern bekommst eine saubere Übersicht (inclusive ToDo-Liste und anderen tollen Spielereien)
(der PHPObjectGenerator, der hier eben verlinkt wurde, baut ebenfalls dafür passende Kommentare... feine Sache...)
 
Etwas Offtopic:

Ich weiss ja nicht wie gross dein Projekt am Ende tatsächlich wird. Aber wenn es uneinschätzbar gross
wird, solltest du vielleicht auch auf eine andere Sprache zurückgreifen.
PHP ist ganz prima für wirklich überschaubare Sachen. Aber ab einer bestimmten Grösse und Komplexität ist sie einfach nicht mehr schön.
Wesentlich eleganter sind dort Ruby und Python (und ganz besonders auf Rails). Wenn du PHP gut kannst, würde dir ein Umsteig auch nicht sonderlich schwer fallen.
 
Zurück
Oben