web-dev-qa-db-fra.com

PHP architecture / conception d'application web

J'ai été projeté la tête la première dans un nouveau travail de développement d'applications Web en PHP. Je ne suis pas du tout nouveau dans PHP, mais je n'ai jamais développé d'applications à grande échelle auparavant. Je me demande comment structurer mon développement pour éviter de me préparer à des problèmes à l'avenir. Comment puis-je concevoir et architecturer mes applications d'une manière saine qui leur permette d'évoluer dans le temps en termes de fonctionnalités et de performances. Je pense à des choses comme:

  • Séparation de l'extrémité arrière de l'extrémité avant
  • Structures de répertoires

J'apprécierais les pointeurs sur les modèles, les cadres et les méthodes de conception architecturale et de conception d'applications qui me permettent d'approcher à grande échelle PHP développement d'applications Web de manière durable.

20
Brad Morris

Un schéma approximatif de l'architecture du dernier projet à grande échelle auquel j'ai participé.

enter image description here

Ce n'est qu'un aperçu de base, adapté des documents d'architecture réels et présenté d'une manière qui ressemble à une approche typique à n niveaux combinée à une approche MVC typique . Comme vous pouvez le voir, la logique et les niveaux de données sont connectés via une couche de service, et plus spécifiquement une API REST , qui a été inspirée par Recess , une version moins connue PHP framework.

Ne réinventez pas la roue

Je travaille avec trois cadres:

  • Zend Framework

    Le géant de PHP, avec une base de code impressionnante bien écrite et une liste complète de fonctionnalités. Sur les applications à grande échelle, vous vous retrouverez à peaufiner le cadre le plus souvent, et je trouve la base de code de ZF la plus agréable à travailler. Mais attention, ce n'est pas un framework d'entrée de gamme .

  • Kohana

    Kohana a commencé comme un fork de CodeIgniter, et c'était une raison suffisante pour que je ne l'utilise pas, au départ. De nos jours, il est devenu un cadre solide et élégant qui se différencie les uns des autres en suivant une approche approche MVC hiérarchique . HMVC permet une extension de modularisation plus importante que MVC . Pour le projet dans le diagramme, j'ai adapté le HMVC de Kohana à ZF, mais j'ai commencé à utiliser Kohana pour des projets plus petits et à le considérer aussi pour les plus grands.

  • CodeIgniter

    Je ne l'utilise qu'en raison d'un projet hérité dont j'ai hérité, à éviter si possible.

Comme l'ont souligné les autres réponses, un ORM est toujours utile. J'utilise largement Doctrine , et vous devriez jeter un œil à ses nouveaux mappeurs pour CouchDB et MongoDB . L'évolutivité est un must sur les applications à grande échelle et vous devez évaluer les solutions NoSQL .

Cela dit, la chose importante à retenir est que les applications plus grandes ont généralement des défis uniques. Vous devriez évaluer toutes les solutions tierces populaires qui existent, et vous gagnerez probablement beaucoup de quelques-unes obscures. Lorsque j'ai évalué Recess pour la première fois, il était loin d'être prêt pour la production, mais son approche en a essentiellement fait le projet.

Performances

Sur les sites Web typiques, vous pouvez vous en tirer avec mise en cache de sortie simple et mise en cache opcode mais sur les applications à grande échelle, vous devriez vraiment envisager la mise en cache de la mémoire, qui est le plus souvent construite autour memcached .

xdebug est principalement connu sous le nom de débogueur, mais peut également servir de profiler . J'ai récemment commencé à utiliser Zend Server et j'adore ses fonctionnalités de traçage de code . Malheureusement, ceux-ci ne sont pas disponibles dans le Community Edition , mais xdebug est une alternative assez décente.

Si vous utilisez Apache, assurez-vous d'optimiser l'enfer . nginx et lighttpd sont apparemment de meilleurs choix , en termes de performances, mais je ne les ai pas beaucoup utilisées et je peux dis pas vraiment.

En ce qui concerne la base de données, Doctrine requête et mise en cache des résultats fait des merveilles, surtout combiné avec memcached . Et bien sûr, nous ne pouvons pas oublier l'avant. L'équipe Performances exceptionnelles de Yahoo a rassemblé une liste complète de meilleures pratiques . Je ne suis pas vraiment un développeur front-end, mais j'ai vu des résultats incroyables sur des projets solo.

Enfin PHP a un tout nouveau mécanisme de collecte des ordures , mérite d'être étudié.

Sécurité

Le monde de PHP est pour le moins chaotique. Je ne suis pas un expert, alors traitez les points suivants comme des conseils génériques:

  • Ouvrir le projet de sécurité des applications Web

    Beaucoup de bonnes choses là-dedans, mais pour un aperçu rapide, vous devriez commencer avec la liste des dix premiers . Et recherchez PHP des solutions pour ces vulnérabilités courantes.

  • Vulnérabilités de pile

    Une bonne habitude est de surveiller périodiquement les bogues ouverts de PHP . Même si vous n'êtes pas un expert vous-même, il existe presque toujours des astuces pour contourner les menaces de sécurité. Et bien sûr, vous devez étendre l'habitude à toutes les autres parties de la pile, en particulier les plus vulnérables, comme le serveur Web et la base de données.

La foule à IT Security Stack Exchange peut vous aider avec des réponses plus instruites.

Lectures complémentaires

30
yannis

Le site Web de développeur d'IBM a un énorme pile de PHP articles , beaucoup d'entre eux sont assez bons. Ils ont un série d'articles comparant PHP frameworks web , et une autre série sur les sites web utilisant le framework CakePHP .

L'ancien site Web "Onlamp" d'O'Reilly a un article sur MVC en PHP . L'auteur de cet article a continué expliquer MVC en détail .

Les articles O'Reilly sont un peu vieux, mais ils vous permettront de continuer. Les trucs IBM developerworks sont vraiment bons et couvrent une grande partie de ce que vous demandez.

1
Bruce Ediger

Je travaille autour de PHP depuis quelques années maintenant. Même si je suis d'accord avec Yannis que cette question est en quelque sorte ouverte, je pense que je vais vous donner quelques conseils. Tout d'abord, comme Yannis dit, vous devriez vous pencher sur MVC, pour ce faire, les deux frameworks que je peux recommander sont CodeIgniter et Symfony . Le premier est léger et très facile à démarrer, cependant, vous devrez peut-être simplement ajouter quelques personnalisations supplémentaires pour faire fonctionner une configuration agréable, y arriverons bientôt. Symfony est un projet démarré par Fabien Potencier qui utilise de nombreux modèles de conception en génie logiciel, cependant, la courbe d'apprentissage est beaucoup plus raide que CodeIgniter .

Maintenant, deuxièmement, vous devriez vous pencher sur la connexion à la base de données, qui m'emmène dans les deux cadres ORM les plus importants pour PHP, Doctrine et Propel . Personnellement, j'aime Propel et même écrit sur la façon de configurer une installation Propel propre sur une application basée sur CodeIgniter , cependant, Symfony est plus dans Doctrine , mais nous allons utiliser l'un ou l'autre. Si vous souhaitez en savoir plus sur Doctrine et Propel , jetez un œil à cette question j'ai demandé il y a quelque temps.

Enfin, vous devriez examiner un cadre de modèles, comme Smarty , Dwoo ou Twigg . Smarty est le plus ancien et donc le plus stable. Dwoo hérite de Smarty et ajoute une chose ou deux pour soutenir OOP mieux sur PHP 5. Enfin Twigg est l'alternative de template à condition que équipe Symfony , je ne l'ai pas vue moi-même mais si elle vient du Équipe Symfony ça devrait être Nice .

J'espère que tout ce discours a du sens, David

1
David Conde