Architektur / Design von PHP-Webanwendungen [geschlossen]

20

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.

Brad Morris
quelle
Hallo! Die gebräuchlichste Architektur für Webanwendungen ist MVC , für PHP und jede andere beliebte Webplattform. Das heißt, Sie sollten unsere FAQ lesen . Obwohl die Softwarearchitektur ein Thema ist, müssen Sie die Frage etwas genauer überarbeiten. Eine "gesunde Diskussion über die allgemeine Architektur" passt nicht zum Q & A-Format der Site.
Yannis
Ich bin ein häufiger Besucher der S / E-Sites. Ich hatte das Gefühl, dass auf diese Frage niemand antworten würde, daher der Kommentar "Diskussion". Vielen Dank für den MVC-Zeiger :)
Brad Morris

Antworten:

29

Ein grobes Diagramm der Architektur des neuesten Großprojekts, an dem ich beteiligt war.

Bildbeschreibung hier eingeben

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

yannis
quelle
1
Gute Antwort; tolle Präsentation; Tolles Layout ... Großartige Arbeit!
Dynamische
@Jae Danke! Hast du alles gelesen? : P Es ist ein bisschen lang, ich habe mich gefragt, ob ich es ein bisschen beschneiden soll.
Yannis
Ha, ich habe es versucht! ;-)
Dynamic
Eigentlich Yannis, ich habe eine Frage an dich. Ich habe mich in letzter Zeit sehr für PHP interessiert. Ich habe versucht, es selbst zu lernen, aber ich habe ein bisschen Ärger. Es scheint auch, dass Sie selbst ziemlich gut mit PHP umgehen können :-). Würde es Ihnen etwas ausmachen, ein bisschen Anleitung zu teilen? Wenn ja, erstelle ich einen Chatraum.
Dynamische
Das ist genau die Antwort, nach der ich gesucht habe! Es gibt verdammt viele Informationen, die ich aufnehmen muss. Ich glaube, ich muss in der nächsten Stunde ein bisschen feilen und basteln, aber du hast mir eine Möglichkeit gegeben, damit anzufangen. Vielen Dank :)
Brad Morris
1

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.

Bruce Ediger
quelle
1

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

David Conde
quelle