Architecture / conception d'applications Web PHP [fermé]

20

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 permet 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 d'annuaire

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

Brad Morris
la source
Salut! L'architecture la plus courante pour les applications Web est MVC , pour PHP et toutes les autres plates-formes Web populaires. Cela dit, vous devriez lire notre FAQ . Bien que l'architecture logicielle soit sur le sujet, vous devez réviser la question pour être un peu plus spécifique. Une «discussion saine sur l'architecture générale» ne correspond pas au format Q&R du site.
yannis
Je suis un visiteur fréquent des sites S / E, j'avais le sentiment qu'il n'y aurait cependant pas de réponse unique à cette question, d'où le commentaire "discussion". Merci pour le pointeur MVC cependant :)
Brad Morris

Réponses:

29

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

entrez la description de l'image ici

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 , un framework PHP moins connu.

Ne réinventez pas la roue

Je travaille avec trois cadres:

  • Cadre Zend

    Le géant des frameworks PHP, avec une base de code impressionnante 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 hiérarchique MVC . HMVC permet une plus grande extension de la modularisation 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 beaucoup Doctrine , et vous devriez jeter un œil à ses nouveaux mappeurs pour CouchDB et MongoDB . L'évolutivité est indispensable 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 des solutions 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.

Performance

Sur les sites typiques que vous pouvez vous en sortir avec simple , la mise en cache de sortie et la mise en cache d'opcode mais sur des applications à grande échelle , vous devriez vraiment envisager la mise en cache de la mémoire, qui est le plus souvent construit autour Memcached .

xdebug est principalement connu sous le nom de débogueur, mais peut également servir de profileur . J'ai récemment commencé à utiliser Zend Server et j'adore absolument ses fonctionnalités de traçage de code . Malheureusement, ceux-ci ne sont pas disponibles dans l' édition communautaire , 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és et je ne peux pas vraiment le dire.

Quant à la base de données, la mise en cache des requêtes et des résultats de Doctrine fait des merveilles, en particulier combinée 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 des 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 , qui mérite d'être étudié.

Sécurité

Le monde de la sécurité PHP est pour le moins chaotique. Je ne suis pas un expert, alors traitez ce qui suit comme des conseils génériques:

  • Projet de sécurité des applications Web ouvertes

    Beaucoup de bonnes choses là-dedans, mais pour un aperçu rapide, vous devriez commencer par la liste des dix premiers . Et recherchez des solutions PHP 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

yannis
la source
1
Très bonne réponse; grande présentation; grande disposition ... Excellent travail!
Dynamic
@Jae Merci! Avez-vous tout lu? : P C'est un peu long, je me demandais si je devais tailler un peu.
yannis
Ha, j'ai essayé! ;-)
Dynamic
En fait Yannis, j'ai une question pour vous. Je suis récemment devenu très intéressé par PHP. J'ai essayé de l'apprendre moi-même, mais j'ai un peu de mal. Il semble également que vous soyez assez bon avec PHP vous-même :-). Pourriez-vous partager quelques conseils? Si oui, je vais créer une salle de chat.
Dynamic
C'est exactement le genre de réponse que je cherchais! C'est une sacrée quantité d'informations à prendre en compte, je pense que je n'aurai pas à faire un peu d'absorption et de bricolage au cours de la prochaine heure, mais vous m'avez donné un point de départ. Merci :)
Brad Morris
1

Le site Web de développeur d'IBM contient une énorme pile d'articles PHP , dont beaucoup sont plutôt bons. Ils ont une série d'articles comparant les frameworks Web PHP , 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 ensuite expliqué 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.

Bruce Ediger
la source
1

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 vous donnerais quelques conseils. Tout d'abord, comme l'a dit Yannis, vous devriez vous pencher sur MVC, pour ce faire, les deux cadres 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 des personnalisations supplémentaires pour faire fonctionner une bonne configuration, y arriverons bientôt. Symfony est un projet lancé par Fabien Potencier qui utilise de nombreux modèles de conception en génie logiciel, cependant, la courbe d'apprentissage est beaucoup plus abrupte que CodeIgniter .

Maintenant, deuxièmement, vous devriez examiner la connexion à la base de données, ce qui m'amène aux deux cadres ORM les plus importants pour PHP, Doctrine et Propel . Personnellement, j'aime Propel et j'ai 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 que j'ai posée 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 ou deux choses pour mieux prendre en charge la POO sur PHP 5. Enfin, Twigg est l'alternative de modélisation fournie par l' équipe Symfony , je ne l'ai pas vue moi-même, mais si cela vient de l' équipe Symfony, cela devrait être agréable .

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

David Conde
la source