Ich bin mit dem Kopf voran in einen neuen Job geworfen worden, bei dem ich Webanwendungen in PHP entwickelt habe. Ich bin kein Neuling in PHP, aber ich habe noch nie groß angelegte Anwendungen entwickelt. Ich frage mich, wie ich meine Entwicklung strukturieren soll, um mich in Zukunft nicht auf Probleme einzustellen. Wie entwerfe und entwerfe ich meine Anwendungen auf solide Weise, sodass sie im Laufe der Zeit in Bezug auf Funktionalität und Leistung skaliert werden können? Ich denke an Dinge wie:
- Hinteres Ende vom vorderen Ende trennen
- Verzeichnisstrukturen
Ich würde mich über Hinweise zu Architektur- und Anwendungsdesignmustern, Frameworks und Methoden freuen, die es mir ermöglichen, auf nachhaltige Weise mit der Entwicklung von PHP-Webanwendungen in großem Maßstab umzugehen.
web-development
design
php
architecture
Brad Morris
quelle
quelle
Antworten:
Ein grobes Diagramm der Architektur des neuesten Großprojekts, an dem ich beteiligt war.
Es handelt sich nur um eine Grundskizze, die aus den tatsächlichen Architekturdokumenten adaptiert und in einer Weise dargestellt wird, die einem typischen n-Tier-Ansatz in Kombination mit einem typischen MVC-Ansatz ähnelt . Wie Sie sehen, sind die Logik- und Datenebenen über eine Serviceschicht und insbesondere eine REST-API verbunden , die von Recess , einem weniger bekannten PHP-Framework , inspiriert wurde .
Das Rad nicht neu erfinden
Ich arbeite mit drei Frameworks:
Zend Framework
Der Gigant von PHP-Frameworks mit einer beeindruckend gut geschriebenen Codebasis und einer umfangreichen Liste von Funktionen. Bei umfangreichen Anwendungen wird das Framework häufig angepasst, und ich finde es am angenehmsten, mit der Codebasis von ZF zu arbeiten. Aber Vorsicht, es ist kein Framework für Einsteiger .
Kohana
Kohana begann als Fork von CodeIgniter, und das war Grund genug für mich, es anfangs nicht zu benutzen. Heutzutage hat es sich zu einem soliden und eleganten Rahmen entwickelt, der sich durch einen hierarchischen MVC-Ansatz voneinander unterscheidet . HMVC ermöglicht eine größere Modularisierung als MVC . Für das Projekt im Diagramm habe ich Kohanas HMVC an ZF angepasst, aber ich habe damit begonnen, Kohana für kleinere Projekte zu verwenden und es auch für größere zu berücksichtigen.
CodeIgniter
Ich benutze es nur aufgrund eines von mir geerbten Legacy-Projekts, vermeide es wenn möglich.
Wie die anderen Antworten gezeigt haben, ist ein ORM immer hilfreich. Ich benutze Doctrine ausgiebig und Sie sollten sich die brandneuen Mapper für CouchDB und MongoDB ansehen . Skalierbarkeit ist ein Muss für umfangreiche Anwendungen und Sie sollten NoSQL-Lösungen evaluieren .
Wichtig ist jedoch, dass größere Anwendungen in der Regel mit besonderen Herausforderungen verbunden sind. Sie sollten jede gängige Drittanbieterlösung bewerten, die es gibt, und Sie werden wahrscheinlich viel von ein paar obskuren profitieren. Als ich Recess zum ersten Mal evaluierte, war es noch weit davon entfernt, produktionsbereit zu sein, aber sein Ansatz machte es im Wesentlichen zu einem Teil des Projekts.
Performance
Auf typischen Websites kann es passieren, dass Sie nicht einfach Ausgabe-Caching und Opcode-Caching ausführen müssen . Bei umfangreichen Anwendungen sollten Sie jedoch das Speicher-Caching in Betracht ziehen, das in den meisten Fällen auf Memcached basiert .
xdebug ist meistens als Debugger bekannt, kann aber auch als Profiler dienen . Ich habe vor kurzem angefangen, Zend Server zu verwenden und ich bewundere die Code-Tracing-Funktionen . Leider sind diese in der Community Edition nicht verfügbar , aber xdebug ist eine recht anständige Alternative.
Wenn Sie Apache verwenden, stellen Sie sicher, dass Sie das Beste daraus machen . nginx und lighttpd sind anscheinend die bessere Wahl , was die Leistung angeht, aber ich habe sie nicht oft benutzt und ich kann es nicht wirklich sagen.
Was die Datenbank anbelangt, so wirkt Doctrines Query & Result Caching Wunder, insbesondere in Kombination mit Memcached . Und natürlich können wir das Frontend nicht vergessen. Das Exceptional Performance- Team von Yahoo hat eine umfangreiche Liste von Best Practices zusammengestellt . Ich bin nicht wirklich ein Front-End-Entwickler, aber ich habe erstaunliche Ergebnisse bei Soloprojekten gesehen.
Schließlich hat PHP einen brandneuen Mechanismus zur Garbage Collection .
Sicherheit
Die Welt der PHP-Sicherheit ist, gelinde gesagt, chaotisch. Ich bin kein Experte. Behandeln Sie die folgenden Punkte als allgemeine Tipps:
Öffnen Sie das Webanwendungssicherheitsprojekt
Es gibt viele gute Sachen, aber für einen schnellen Überblick sollten Sie mit der Top-Ten-Liste beginnen . Und suchen Sie nach PHP-Lösungen für diese häufig auftretenden Sicherheitslücken.
Stack-Schwachstellen
Es ist eine gute Angewohnheit, regelmäßig die offenen Fehler in PHP zu überwachen . Auch wenn Sie selbst kein Experte sind, gibt es fast immer Tipps zur Umgehung von Sicherheitsbedrohungen. Und natürlich sollten Sie die Gewohnheit auf jeden anderen Teil des Stapels ausdehnen, insbesondere auf die am stärksten gefährdeten Teile wie den Webserver und die Datenbank.
Die Menge bei IT Security Stack Exchange kann Ihnen mit fundierteren Antworten behilflich sein.
Weitere Lektüre
quelle
Die Developerworks-Website von IBM enthält eine Vielzahl von PHP-Artikeln , von denen viele recht gut sind. Sie haben eine Reihe von Artikeln, die PHP-Webframeworks vergleichen , und eine weitere Reihe über Websites, die das CakePHP-Framework verwenden .
O'Reillys alte "Onlamp" -Website enthält einen Artikel über MVC in PHP . Der Autor dieses Artikels erklärte MVC ausführlich .
Die O'Reilly-Artikel sind ein bisschen alt, aber sie werden Sie zum Laufen bringen. Das IBM Developerworks-Zeug ist wirklich gut und deckt eine Menge von dem ab, wonach Sie fragen.
quelle
Ich arbeite jetzt seit ein paar Jahren mit PHP. Obwohl ich Yannis zustimme, dass diese Frage irgendwie offen ist, würde ich Ihnen ein paar Hinweise geben. Erstens, wie Yannis sagte, sollten Sie sich mit MVC befassen. Dazu kann ich die beiden Frameworks CodeIgniter und Symfony empfehlen . Die erste ist leicht und sehr einfach zu erlernen. Möglicherweise müssen Sie jedoch einige zusätzliche Anpassungen vornehmen, damit ein gutes Setup funktioniert. Symfony ist ein Projekt von Fabien Potencier , das viele der Designmuster in der Softwareentwicklung verwendet. Die Lernkurve ist jedoch viel steiler als bei CodeIgniter .
Als zweites sollten Sie sich die Datenbankverbindung ansehen, die mich zu den beiden bekanntesten ORM-Frameworks für PHP, Doctrine und Propel führt . Persönlich liebe ich Propel und habe sogar geschrieben, wie man eine saubere Propel-Installation auf einer CodeIgniter- basierten App erstellt. Symfony befasst sich jedoch mehr mit Doctrine , aber lassen Sie uns eine von beiden verwenden. Wenn Sie mehr über Doctrine and Propel erfahren möchten , werfen Sie einen Blick auf diese Frage, die ich vor einiger Zeit gestellt habe.
Schließlich sollten Sie sich ein Template-Framework wie Smarty , Dwoo oder Twigg ansehen . Smarty ist der älteste und damit der stabilste. Dwoo erbt von Smarty und fügt ein oder zwei Dinge hinzu, um OOP unter PHP 5 besser zu unterstützen. Schließlich ist Twigg die Template-Alternative, vorausgesetzt, das Symfony-Team hat es selbst nicht gesehen, aber wenn es vom Symfony-Team stammt , sollte es nett sein .
Hoffe, diese ganze Rede ergibt einen Sinn, David
quelle