it-swarm.com.de

PHP Architektur / Design der Webanwendung

Ich bin mit dem Kopf voran in einen neuen Job bei der Entwicklung von Webanwendungen in PHP geraten. Ich bin kein Neuling in PHP, aber ich habe noch keine groß angelegten Anwendungen entwickelt. Ich frage mich, wie ich meine Entwicklung strukturieren soll, um mich in Zukunft nicht auf Probleme einzulassen. Wie entwerfe und entwerfe ich meine Anwendungen auf eine solide Weise, die es ihnen ermöglicht, im Laufe der Zeit hinsichtlich Funktionalität und Leistung zu skalieren? Ich denke an Dinge wie:

  • Trennen des hinteren Endes vom vorderen Ende
  • Verzeichnisstrukturen

Ich würde mich über Hinweise auf Architektur- und Anwendungsdesignmuster, Frameworks und Methoden freuen, die es mir ermöglichen, die Entwicklung von PHP Webanwendungen in großem Maßstab auf nachhaltige Weise anzugehen.

20
Brad Morris

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

enter image description here

Es ist nur eine grundlegende Gliederung, die aus den tatsächlichen Architekturdokumenten übernommen und so dargestellt wird, dass sie einem typischer n-Tier-Ansatz in Kombination mit einem typischen MVC-Ansatz ähnelt. Wie Sie sehen können, sind die Logik- und Datenebenen über eine Serviceschicht verbunden, insbesondere über eine REST-API , die von Aussparung inspiriert wurde, einer weniger bekannten PHP Framework.

Das Rad nicht neu erfinden

Ich arbeite mit drei Frameworks:

  • Zend Framework

    Das Ungetüm von PHP Frameworks, mit einer beeindruckend gut geschriebenen Codebasis und einer umfangreichen Liste von Funktionen. In großen Anwendungen werden Sie feststellen, dass Sie das Framework häufig optimieren und ich finde die Codebasis von ZF am angenehmsten. Aber Vorsicht, es ist kein Einstiegs-Framework .

  • Kohana

    Kohana begann als Gabelung von CodeIgniter, und das war Grund genug für mich, es zunächst nicht zu verwenden. Heutzutage hat es sich zu einem soliden und eleganten Rahmen entwickelt, der sich durch einen Hierarchical 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 begonnen, Kohana für kleinere Projekte zu verwenden und es auch für größere in Betracht zu ziehen.

  • CodeIgniter

    Ich benutze es nur wegen eines Legacy-Projekts, das ich geerbt habe. Vermeiden Sie es, wenn möglich.

Wie die anderen Antworten zeigten, ist ein ORM immer nützlich. Ich benutze Doctrine ausgiebig, und Sie sollten sich die brandneuen Mapper für CouchDB und MongoDB ansehen. Skalierbarkeit ist ein Muss bei großen Anwendungen und Sie sollten NoSQL-Lösungen bewerten.

Das Wichtigste ist jedoch, dass größere Anwendungen normalerweise besondere Herausforderungen haben. Sie sollten jede beliebte Lösung von Drittanbietern bewerten, die es gibt, und Sie werden wahrscheinlich viel von ein paar obskuren Lösungen profitieren. Als ich Recess zum ersten Mal evaluierte, war es noch lange nicht produktionsbereit, aber sein Ansatz schaffte es im Wesentlichen in das Projekt.

Leistung

Auf typischen Websites kommen Sie möglicherweise mit einfaches Ausgabe-Caching und Opcode-Caching davon, aber bei großen Anwendungen sollten Sie wirklich das Speicher-Caching in Betracht ziehen, das am häufigsten um memcached .

xdebug ist meistens als Debugger bekannt, kann aber auch als Profiler dienen. Ich habe vor kurzem angefangen, Zend Server zu verwenden, und ich liebe seine Code-Tracing-Funktionen . Leider sind diese nicht in der Community Edition verfügbar, aber xdebug ist eine ziemlich anständige Alternative.

Wenn Sie Apache verwenden, stellen Sie sicher, dass zum Teufel damit optimieren . nginx und lighttpd sind anscheinend bessere Entscheidungen , was die Leistung betrifft, aber ich habe sie nicht oft verwendet und kann es nicht wirklich sagen.

In Bezug auf die Datenbank wirkt Doctrines Abfrage- und Ergebnis-Caching Wunder, insbesondere in Kombination mit memcached . Und natürlich können wir das Frontend nicht vergessen. Das außergewöhnliche Leistung 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 PHP hat einen brandneuen Garbage Collection-Mechanismus , der einen Blick wert ist.

Sicherheit

Die Welt der PHP Sicherheit ist gelinde gesagt chaotisch. Ich bin kein Experte, also behandeln Sie Folgendes als allgemeine Tipps:

  • Open Web Application Security Project

    Es gibt viele gute Sachen, aber für einen schnellen Überblick sollten Sie mit dem Top-Ten-Liste beginnen. Und Forschung PHP Lösungen für diese häufigen Schwachstellen.

  • Sicherheitslücken stapeln

    Eine gute Angewohnheit ist es, offene PHP-Fehler regelmäßig 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 ausweiten, insbesondere auf die am stärksten gefährdeten wie den Webserver und die Datenbank.

Die Menge bei IT Security Stack Exchange kann Ihnen mit fundierteren Antworten helfen.

Weiterführende Literatur

30
yannis

Die IBM Developerworks-Website enthält einen großer Stapel von PHP Artikeln , viele davon recht gut. Sie haben einen Artikelserie zum Vergleich PHP Web Frameworks und eine weitere Serie über Websites, die das CakePHP Framework verwenden.

O'Reillys alte "Onlamp" Website hat ein Artikel über MVC in PHP . Der Autor dieses Artikels fuhr fort mit erklären Sie MVC im Detail .

Die O'Reilly-Artikel sind etwas alt, aber sie bringen Sie zum Laufen. Das IBM Developerworks-Zeug ist wirklich gut und deckt eine Menge von dem ab, was Sie verlangen.

1
Bruce Ediger

Ich arbeite jetzt seit ein paar Jahren an PHP. Obwohl ich Yannis zustimme, dass diese Frage irgendwie offen ist, denke ich, dass ich Ihnen ein paar Hinweise geben würde. Erstens, wie Yannis sagte, sollten Sie sich MVC ansehen. Dazu können ich zwei Frameworks empfehlen: CodeIgniter und Symfony . Das erste ist leicht und sehr einfach zu handhaben. Möglicherweise müssen Sie jedoch nur einige zusätzliche Anpassungen hinzufügen, damit ein Nice-Setup funktioniert. Symfony ist ein Projekt von Fabien Potencier , das viele der Entwurfsmuster in der Softwareentwicklung verwendet. die Lernkurve ist jedoch viel steiler als CodeIgniter 's.

Zweitens sollten Sie sich die Datenbankverbindung ansehen, die mich zu den beiden bekanntesten ORM-Frameworks für PHP führt: Doctrine und Propel . Persönlich liebe ich Propel und sogar schrieb über das Einrichten einer sauberen Propel-Installation auf einer CodeIgniter -basierten App, Symfony steht jedoch mehr auf Doctrine , aber lassen Sie uns eine von beiden verwenden. Wenn Sie mehr über Doctrine und Propel erfahren möchten, schauen Sie sich diese Frage an, die ich vor einiger Zeit gestellt habe.

Schließlich sollten Sie sich ein Template-Framework wie Smarty , Dwoo oder Twigg ansehen. Smarty ist das älteste und damit das stabilste. Dwoo erbt von Smarty und fügt ein oder zwei Dinge hinzu, um OOP besser auf PHP zu unterstützen. 5. Schließlich Twigg ist die Vorlagenalternative, vorausgesetzt das Symfony-Team , ich habe es selbst nicht gesehen, aber wenn es vom Symfony-Team es sollte schön sein .

Ich hoffe, diese ganze Rede macht Sinn, David

1
David Conde