Points clés
Cet article a été initialement publié sur ZenOfCoding et est republié ici avec la permission de l'auteur.
Une question simple m'a incité à m'asseoir et à rédiger ce suivi de mon article il y a environ un an.
Q: Que pensez-vous de la situation actuelle? (24 février 2017)
A: "Je pense que c'est principalement à Laravel et Symfony en ce moment; en ce qui concerne le cadre PHP. Zend, codeigniter, yii, etc. Je peux voir des raisons d'utiliser ces cadres que si vous les connaissez déjà ou si vous avez des développeurs qui ont l'habitude de les utiliser. Lorsque le développement réel commence, vous devez être en mesure de trouver des réponses aux outils, aux plugins et aux questions fréquemment posées. Avec les communautés Laravel et Symfony et le développement continu de nouveaux «modules» ou fonctionnalités, vous ne vous sentez jamais en arrière. Laracasts seul (même si vous ne développez pas avec Laravel) est génial.
Qu'il s'agisse d'intégration avec des services tels que Iron.io ou d'autres fournisseurs SaaS, le support pour diverses sources de données ou les environnements de développement locaux comme Homestead, ces cadres et modules de support sont plus prospectifs.
Lumen complète le développement rapide de l'API, et Laravel est en effet une excellente méthode pour le développement rapide des applications et le prototypage aujourd'hui. Cela ne veut pas dire qu'il est soumis à une sorte de limitation lors de la construction de grandes applications.
Cependant, dans l'ensemble, nous voyons un passage à une architecture basée sur les conteneurs où MVC est beaucoup moins efficace. Il s'agit de microservices, d'orchestration et de création d'applications dans des "fonctions" (c'est-à-dire AWS Lambda et des services similaires). Il est peut-être temps d'améliorer vos compétences Node.js et Golang :) »
Bien que je sois généralement satisfait de cette réponse, je ne peux m'empêcher de penser que c'est une bonne idée d'élaborer certains de ces points et de réexaminer le statu quo.
Avant de commencer à parler de sujets étranges comme "Golang", prenons du recul et voyons les tendances du champ Framework PHP MVC 2017.
Je pense que la tendance que nous avons observée dans le passé se poursuit. Laravel évolue toujours tandis que d'autres sont en retard. La popularité de Symfony a légèrement augmenté, peut-être en raison de la sortie très attendue de Symfony 3.
(J'ai essayé des recherches de comparaison plus spécifiques comme "CakePHP 3" ou "ZF2", mais ces recherches n'ont pas produit de tendances statistiquement significatives).
J'ai rejoint Codeigniter cette année parce qu'il était très populaire, et c'était évident. J'ai reçu de nombreuses questions sur Codeigniter et mon opinion sur sa place dans la communauté PHP MVC ... En bref, CI ne rivalise toujours pas car ce n'est pas un vrai framework MVC. Je ne sais pas comment l'appeler sauf pour une collection Popo bien organisée ...
citons directement à partir de leur manuel:
Codeigniter adopte une approche assez lâche de MVC car aucun modèle n'est nécessaire. Si vous n'avez pas besoin de séparation supplémentaire ou que vous constatez que le maintien de modèles est plus complexe que vous ne le souhaitez, vous pouvez les ignorer et créer votre application de manière minimale à l'aide de contrôleurs et de vues.
Je suis totalement en désaccord avec cette approche quand il s'agit de construire le cadre. C'est peut-être une belle passe-partout, c'est pourquoi Codeigniter est populaire, mais le cadre doit appliquer certaines disciplines ou le produit final deviendra un tas de codes de spaghetti enveloppés dans une sorte de "motifs".
Ensuite, Symfony 3 nous apporte quelques améliorations à l'expérience du développeur, à l'injection de dépendance et à de nombreuses autres fonctionnalités. Comme de nombreux homologues PHP, il fournit désormais un microframe. En revanche, ZF3 offre une gamme d'améliorations, telles que le support pour PHP7 (éventuellement) et même son propre microframe… mais comme le dit leur manuel:
Pour les utilisateurs de Zend Framework 2 MVC, la différence est subtile ...
J'espère vraiment qu'ils disent qu'il y a beaucoup de différences, il y a des améliorations architecturales majeures et de merveilleux nouveaux modules qui vous aident à développer des choses de manière moderne. Hélas, dans la plupart des cas, ZF3 est toujours très similaire à ZF2.
C'est ainsi que je regarde le monde des frameworks PHP aujourd'hui:
Il ne fait aucun doute que Laravel vole le spectacle. La quantité d'informations disponibles, Laracasts, les talents mondiaux des développeurs, la mise en œuvre du schéma simple, le jeu d'outils de test intégré, la mise en œuvre des enregistrements d'activités sous forme éloquente, les versions légères en lumière, le développement local utilisant Homestead (Vagrant) fait que ce cadre se distingue pour les débutants et développeurs expérimentés.
mais le modèle éloquent peut devenir encombré et assez grand, créant potentiellement trop de services Laravel (à ne pas confondre avec les microservices), et les gens commencent à envisager d'implémenter le modèle de référentiel où il ne convient pas. Par conséquent, des demandes de monomère sont nées.
Si vous n'êtes pas familier avec le mode d'enregistrement actif et que vous avez besoin de la flexibilité supplémentaire du référentiel, ou si vous n'aimez pas voir trop de fonctions anonymes, puis utilisez la doctrine Symfony. Est-ce que je pense que Symfony est le chemin des applications monolithiques? Dans une certaine mesure, oui. Cependant, c'est probablement le plus élégant.
Dans l'ensemble, je ne l'appellerai pas un changement radical par rapport à l'année dernière. Pourtant, nous devons examiner le problème d'un point de vue plus large: une application bien conçue n'est pas seulement MVC; Tout cela peut être mis en œuvre dans la pile MVC, mais des soins supplémentaires sont nécessaires pour éviter les applications monolithiques.
J'ai mentionné la montée des microservices et la nécessité d'améliorer les compétences de Golang ou de nœuds. En fait, même dans l'article PHP MVC, il serait insensé de ne pas mentionner le changement évident vers l'architecture orientée microservices (MOA); et c'est incroyablement rapide.
Bien que ces deux concepts ne s'excluent pas mutuellement, il n'y a aucune raison d'essayer de trouver des similitudes entre les deux, car ils représentent des philosophies différentes, quoique qui se croisent.
Par exemple, mettre votre application MVC dans un conteneur, mettre MySQL dans un autre conteneur, puis les lier ensemble ne représente pas nécessairement un MOA approprié. C'est certainement une meilleure approche, en fait, bien mieux que d'essayer d'installer MAMP, XAMPP ou toute autre chose désordonnée dont vous avez besoin pour obtenir une machine locale pour servir votre application.
En outre, il peut résoudre certains problèmes tels que l'exécution facilement des environnements locaux sur différentes plates-formes (développeurs) et le déploiement de politiques dans certains cas, mais les applications monolithiques MVC existent toujours dans votre couche / conteneur de votre application.
Ce type de "destruction" est exactement ce que les microservices veulent réaliser. Bien que MVC résout votre structure de code et vos problèmes organisationnels en fournissant un moyen fiable de séparer les préoccupations, le conteneur / service / MOA étend encore ce concept.
Vous ne séparez plus la vue du modèle, mais séparez maintenant chaque unité "bloc" ou logique de l'application en un service séparé conçu pour gérer correctement ses propres responsabilités.
Si votre application MVC a un contrôleur "Rechercher", des opérations et des méthodes de modèle connexes, nous avons déjà des exemples d'applications monolithiques.
Au lieu de cela, en utilisant la méthode MOA, nous fournirons un service pour chaque unité de traitement. Par exemple:
Attendez, mais tous ces "services" ne font-ils pas partie de la pile MVC? Oui, c'est tout. Ce sont des éléments constitutifs de nos applications monolithiques.
avec le MOA, chaque service fonctionne dans son propre environnement, et en tant que développeur et, plus important encore, en tant qu'architecte, nous sommes libres de concevoir la meilleure façon de résoudre un besoin spécifique.
Par exemple, si je devais écrire un service de traitement d'image dans un environnement Laravel, je pourrais utiliser des outils tels que les extensions PHP-GD2, ce qui peut ne pas être le moyen le plus efficace de traiter les images. Le service C qui gère mes besoins de traitement d'image peut être beaucoup plus rapide et est certainement plus puissant à l'échelle. Pour élaborer davantage, nous pouvons désormais prendre la sortie du service de traitement d'image et l'envoyer au Service de Datastore, au service CloudStorage et au service de messagerie de file d'attente.
en utilisant un tas de travaux Cron et peut-être des applications MVC et des scripts personnalisés distincts pour résoudre le même défi, c'est ce que nous avons fait dans le passé (c'est-à-dire il y a 2 ans). Il est temps d'aller de l'avant.
C'est là que le problème commence (ou se termine, selon l'endroit où vous vous dirigez). D'une part, il est difficile de mettre à l'échelle des applications monolithiques, et si vous créez de plus en plus de logique dans la même pile MVC, vous pouvez rencontrer une application bien structurée, mais sa complexité est terrifiante.
En revanche, si vous construisez des milliers de microservices dans différentes langues, comment gérez-vous ce gâchis?
Plus d'une catastrophe a été signalée.
Il existe différents outils d'orchestration de conteneurs (tels que Kubernetes, Swarm, Mesos), les services de déploiement de conteneurs (c'est-à-dire GKE et AWS ECS), mais peu d'entreprises ont maîtrisé l'architecture Docker. Il y a en effet quelques histoires de réussite sur la création d'infrastructures utilisant Docker ou d'autres technologies de conteneurs (c'est-à-dire GKE). La plupart de ces cas proviennent de sociétés qui peuvent entreprendre les ressources des architectes, des DevOps, des DBA et des ingénieurs. Néanmoins, pour l'instant, il y a d'innombrables débats sur la façon de déployer un MOA bien fixé et élégant. Dans ce cas, une taille unique ne convient absolument pas à toutes les situations, et il existe de nombreuses façons de résoudre votre défi.
Quoi qu'il en soit, vous ne pouvez pas résoudre ce problème seul (DevOps FTW!), Et il ne doit être résolu qu'après avoir atteint une échelle relativement grande. Peut-être que ce n'est peut-être pas le meilleur moment pour sur-conception.
Pour aujourd'hui (et ceux qui traitent des applications avec une faible complexité ou une demande de trafic), une approche intermédiaire heureuse consiste à décharger de nombreux services typiques à des fournisseurs tiers. Presque tout est maintenant disponible en tant que service. Les travaux d'arrière-plan, le traitement d'image, l'authentification, l'analyse des données, la journalisation, l'envoi d'e-mails, les systèmes de file d'attente n'ont pas besoin d'être construits dans la même pile MVC, et les architectes devraient considérer ce qui peut être déchargé dans le système SaaS pour des frais mensuels faibles (c'est-à-dire, Recherche d'algolies) ou un service Docker construit sur mesure qui peut s'exécuter dans certains espaces cloud qui gèrent un traitement d'image ennuyeux.
Le point ici, je pense, c'est que vous ne devriez pas plonger de front dans un projet réarchitecte, ne jetez pas tout ce que vous avez aujourd'hui et libérez Docker Swarms partout où vous pouvez imaginer. La base de l'amélioration peut être progressivement introduite en découplant les pièces possibles, en comprenant les goulots d'étranglement dans le système et en appliquant le concept de séparation des préoccupations à ces zones problématiques.
2017 nous apportera plus de conversations et de déploiements de production sur le MOA basé sur les conteneurs. Mes opinions et mes bêtises sur Docker, utiliser Golang ou Node ne signifie pas que PHP est "mort" ou quelque chose comme ça ... J'ai l'impression que nous devons rester en avance sur le pack en tant que développeurs, donc si les microservices sont là où c'est où, Alors pourquoi ne pas apprendre Golang? Il est idéal pour développer de petites applications conteneurisées (en raison de la petite empreinte, de la vitesse rapide et du traitement parallèle). Node et Golang sont amusants car ils vous permettent de créer de petits services qui font partie de grandes tribus qui les relient ensemble et les publient sous forme d'essaims épiques pour les conteneurs Docker si vous préférez. Cependant, toutes ces solutions et langues de pointe impressionnantes ne signifient pas que PHP n'est donc plus pertinent ou «mort». Nous allons certainement construire la pile MVC et les points de terminaison API pendant un certain temps.
Un problème qui n'a pas été résolu avec le MOA est que si les conteneurs nous aident à éliminer les applications monolithiques sur le backend, nous sommes toujours confrontés à de nombreux problèmes architecturaux dans la couche frontale, l'interface utilisateur ou les vues. Nous pouvons créer une application backend très puissante, mais il finira par répondre dans JSON, qui doit être rendu dans la demande client d'une manière ou d'une autre. L'objet de réponse final provient-il d'un simple PHP (par exemple, un point de terminaison (URL) piloté par Lumen) ou une série d'unités de décision et de traitement découplées par une interface de message? Cela dépend vraiment de vos besoins et des exigences de votre application.
Cette année, découvrez Laravel, concentrez-vous sur Docker, Golang et concentrez-vous absolument sur le déploiement de pipelines. La conversion du local à la production devrait être plus fluide qu'elle ne l'a été pendant un certain temps, en particulier lors de la création d'applications MVC.
Le cadre du modèle de contrôle du modèle (MVC) dans PHP est un modèle de conception qui divise une application en trois composants interdépendants. Le composant modèle correspond à l'utilisateur en utilisant la logique liée à toutes les données. Le composant de vue est utilisé pour toute la logique de l'interface utilisateur de l'application. D'un autre côté, le contrôleur agit comme une interface entre le modèle et les composants de la vue pour gérer toutes les demandes de logique métier et entrantes.
Le développement de PHP utilisant le cadre MVC présente de nombreux avantages. Il fournit une séparation claire des préoccupations, ce qui rend le code plus facile à maintenir et à comprendre. Il favorise également la réutilisabilité et l'évolutivité du code, permettant aux développeurs de créer des applications robustes et à grande échelle. De plus, les cadres MVC sont souvent livrés avec des outils et des bibliothèques intégrés pour faciliter les tâches telles que l'abstraction de la base de données, la validation des formulaires, les séances et le traitement des cookies.
En 2017, certains des meilleurs cadres MVC PHP incluent Laravel, Symfony, Codeigniter, Yii2 et CakePHP. Laravel est particulièrement populaire pour sa syntaxe élégante, ses fonctionnalités puissantes et une communauté de développeurs dynamiques. Symfony est également largement utilisé pour son haut degré de flexibilité et d'architecture modulaire.
La sélection du bon cadre PHP MVC dépend de plusieurs facteurs, notamment la taille et la complexité du projet, l'expertise de l'équipe, la communauté et le soutien du cadre, ses performances et son évolutivité, et la courbe d'apprentissage impliquée. Il est recommandé que différents cadres soient étudiés et comparés en fonction de ces facteurs avant de prendre une décision.
Dans le cadre PHP MVC, lorsqu'un utilisateur envoie une demande, il va d'abord au contrôleur, qui identifie le modèle approprié pour traiter les données. Le modèle interagit ensuite avec la base de données, traite les données et les renvoie au contrôleur. Le contrôleur charge ensuite la vue correspondante, qui présente des données à l'utilisateur dans un format convivial.
Laravel est un cadre PHP MVC connu pour sa syntaxe élégante et ses caractéristiques riches. Il fournit divers outils pour le routage, l'authentification, les séances, la mise en cache et d'autres tâches. Laravel a également une communauté dynamique et une grande quantité de documentation qui en fait un choix populaire pour les développeurs.
La courbe d'apprentissage du cadre PHP MVC peut varier. Certains cadres comme Laravel et Codeigniter sont connus pour leur simplicité et sont relativement faciles à apprendre. D'autres cadres tels que Symfony et YII2 peuvent prendre plus de temps à maîtriser car leurs fonctions et concepts sont complexes.
Oui, vous pouvez utiliser PHP sans cadre MVC. Cependant, l'utilisation de frameworks peut rendre votre processus de développement plus efficace et votre code est plus facile à entretenir, en particulier dans les grandes applications.
L'abstraction de la base de données dans le cadre PHP MVC fait référence à la pratique de la cachette des détails des opérations de base de données pour éviter d'affecter le reste de l'application. Cela permet aux développeurs d'interagir avec la base de données à l'aide d'une API cohérente quel que soit le système de base de données sous-jacent.
Pour commencer avec le framework PHP MVC, vous devez d'abord comprendre PHP et les bases de programmation orientées objet. Vous pouvez ensuite choisir un cadre qui convient à vos besoins et à commencer à l'apprendre à travers sa documentation officielle, ses tutoriels en ligne et ses forums communautaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!