Cette revue des modèles de conception pratiques de Brandon Savage en PHP comprendra mes propres opinions et impressions sur le livre et l'aspect de l'auto-édition. Un grand merci à Brandon de m'avoir donné une copie d'examen.
Les modèles de conception concernent des solutions courantes aux problèmes courants.
… Ce sont des concepts, pas des plans; idées, pas de conceptions finies.
… Ils ajoutent de la clarté à une situation autrement difficile.
- Brandon Savage, modèles de conception pratiques en php
En commençant par une note plus légère et introductive, Brandon explique le besoin de frameworks, soutient que la POO ne signifie pas simplement envelopper des choses dans les classes et explique pourquoi les modèles de conception semblent difficiles à apprendre. Il continue ensuite avec une légère introduction dans des principes solides et jette les bases de concepts plus avancés. Il explique pourquoi chaque règle solide est importante et ce que cela signifie. Étant donné que Solid est un principe de conception logicielle bien établi, il est naturel de le comparer à chaque modèle qui est sur le point d'être expliqué dans le livre. Ou, pour être plus précis, évaluer comment chaque modèle respecte les principes solides, tout en fournissant au développeur ses fonctionnalités prévues.
Si j'exprime les questions dans la terminologie du modèle Dreyfus, il affirme que le livre est là pour transformer un novice en un développeur de niveau compétent sans les soumettre à des erreurs débutantes avancées alors que, en fait, une telle approche de l'apprentissage n'est pas entièrement possible - c'est Pas comment fonctionne le processus d'acquisition de connaissances humaines.
Comme il pourrait ne pas être trop évident à partir du COT, les modèles expliqués dans ce livre sont, dans l'ordre:
Avec autant de modèles couverts (et bien couverts), j'ai été surpris de voir une phrase telle que « […] Par exemple, le modèle de registre (non couvert dans ce livre)… ». Pourquoi pas? Le modèle de registre est un modèle populaire et très simple à expliquer même s'il n'est pas exactement recommandé de nos jours.
Modèle par motif, chacun est bien expliqué et la plupart sont suivis par des exemples de code démontrant leur implémentation potentielle, bien que j'ai un reproche avec l'exemple de motif d'usine avec le cache.
Le modèle est réalisé sur un exemple de caches différents - APC et Memcache - et les deux sont engendrés via une usine, qui est injectée dans le service a besoin d'un composant de cache.
Cela a du sens pour moi, mais je peux voir des personnes moins expérimentées se demander pourquoi on pourrait réellement avoir besoin de l'étape d'usine, et pas simplement taper allusion à l'interface de cache elle-même dans le constructeur, nécessitant l'injection de l'objet de cache lui-même, et non son usine. L'exemple actuel dispose à la fois d'une interface d'usine et d'une interface de cache, et à tout le moins, on semble être un excédent. Cela n'a jamais été expliqué d'une manière accessible d'un développeur de niveau intermédiaire, et je crains que cela ne soit déroutant pour certains. Je suis également loin d'être satisfait de l'explication du motif de pont - cela semblait manquant, comme s'il n'était que rayé à la surface, pour ne jamais revenir correctement.
D'un autre côté, j'ai adoré l'explication du modèle composite et sa démonstration sur des exemples d'arbres très intéressants - l'auteur construit un arbre composite avec un nombre arbitraire de niveaux de nœuds imbriqués qui s'appliquent fantastiquement à la construction de menu, à la représentation de la hiérarchie et plus - et j'étais particulièrement ravi de l'explication du modèle de décorateur. Cela a été fait de manière très accessible et sur de bons exemples utilisables. Ce modèle en particulier était celui que j'ai toujours eu du mal à expliquer aux gens à la sortie du bleu, et je n'ai pas encore trouvé une meilleure panne que dans ce livre.
Dans un cas du livre, Brandon affirme que les modèles sont les haltérophiles les plus lourds d'une application MVC, contenant toute la logique commerciale et le code de validation. Ceci est une déclaration qui est beaucoup trop absolu pour que je puisse accepter - du haut de ma tête, je peux penser à un exemple où ce n'est pas vrai: Laravel. Avec Laravel 5 qui sort et l'ajout de demandes de formulaire, les modèles deviendront encore plus légers.
Accordé, certaines personnes ont tendance à tout mettre et l'évier de la cuisine dans les modèles, mais il y a des gens qui mettent également la même quantité de code de Dieu dans les contrôleurs. Mon expérience et ma préférence disent que tout ce qui concerne le cadre doit être très léger (petits contrôleurs, petits modèles, petites vues ou pas), et tout ce qui est lié au service (services, plugins, bibliothèques, aides) , tant qu'ils sont interopérables entre les cadres. C’est une préférence personnelle, je suppose. Une autre chose m'a paru bizarre, cependant:
" La création de bons modèles est l'une des tâches les plus compliquées de tous les développeurs. Pendant longtemps, la documentation du framework Zend a soutenu qu'il n'y avait pas de classe Zend_Model car la création d'un modèle est la majeure partie d'un processus de développement d'applications. Créer un Zend_Model serait de supposer que tout le monde pourrait ou voudrait utiliser la même structure de modèle, ce qui serait impossible pour la même raison que je n'ai inclus aucun code dans ce chapitre. "
Bien que cela ait du sens, illustrer la valeur, la passerelle et l'objet de stockage dans la plus simple des manières auraient été incroyablement bénéfiques pour la première fois au modèle du modèle de domaine. Le modèle du modèle de domaine était, à mon avis, trop négligé et bien trop théorique dans ce livre.
Tout au long du livre, Brandon fait des références à des concepts avancés (ORM, héritage, injection de dépendance) et à un contenu tiers sans s'y lier (gang de quatre), en supposant que le lecteur le connaît tout. Le gang de quatre en particulier est mentionné à plusieurs reprises et pourrait utiliser au moins un lien vers les modèles de conception - sinon le lecteur «novice» et «débutant avancé» ne regardera que la phrase dans la confusion.
Dans d'autres cas, la structure des paragraphes est écrite d'une manière bien au-delà du niveau de compréhension d'un utilisateur novice à intermédiaire:
C'est une question séculaire de nombreux développeurs luttent avec tout le temps: si je travaille pour inverser mes dépendances et ne pas créer des objets dans mes classes, comment puis-je créer les dépendances dont j'ai besoin pendant l'exécution qui peut «Ne pas nécessairement être injectés?
Ce n'est pas à un niveau consommable par le lecteur qui aurait besoin de ce livre pour se familiariser avec les modèles. Le lecteur qui comprend entièrement cette phrase est probablement déjà entièrement familier avec tous les modèles du livre, remettant ainsi en question le véritable public cible. Je crois que cela est dû au fait que M. Savage souffre de ce que l'on appelle «la malédiction de la connaissance».
wikipedia le définit comme tel:
La malédiction de la connaissance est un biais cognitif qui conduit les parties mieux informées pour trouver extrêmement difficile de réfléchir aux problèmes du point de vue des parties moins informées.
La malédiction de la connaissance est un événement très courant chez les professionnels qui ne sont pas officiellement formés pour transmettre ce qu'ils savent, mais qui est aussi quelque chose qui perd effet avec le temps, l'expérience et les commentaires. C'est aussi pourquoi nous, à SitePoint, encourageons les gens à nous donner des commentaires honnêtes sur nos messages, et c'est pourquoi nous essayons de simplifier les choses plus simples et plus rationalisées à chaque nouvelle publication. Personne n'est à l'abri de la malédiction - certains en sont plus affectés.
Ces dernières années, l'auto-édition semble avoir vraiment décollé. Ceux qui ne recourent pas à Leanpub sont entièrement en solo, comme Brandon l'a fait avec ce livre. Bien que cette approche accélère effectivement le processus et permet aux experts de mettre du contenu de qualité entre les mains des parties intéressées à un rythme alarmante rapide, il permet également plus d'erreurs, de mauvais contenus et de fautes de frappe.
La plupart des problèmes qui affligent d'autres écrivains auto-publiés également, malheureusement, affligent ce livre. Manquant d'un éditeur expérimenté, il ne semble pas eu de conseils sur le contenu, la forme ou même la précision grammaticale et syntaxique - quelque chose que les gens qui sont originaires d'une langue gâchent souvent.pensant que les locuteurs natifs ne font pas d'erreurs et n'ont donc pas besoin d'édition formelle s'apparentent, par exemple, à une entreprise basée sur une personne qui embauche quelqu'un de Country X à la preuve de lire sa version X-Language du site sur Le seul terrain de la relecteurs étant un locuteur natif de la langue X. Vous ne voudriez vraiment pas m'engager pour relire votre version croate d'un site Web même si c'est ma langue maternelle, mais vous auriez du mal à trouver un meilleur anglais langue éditeur.
En tant qu'utilisateur avancé, j'avais une connaissance préalable de la plupart sinon tous les modèles expliqués dans le livre. Cependant, les explications que j'ai vécues ont été bien formées et accessibles à un utilisateur intermédiaire - bien qu'à mon avis, pas à une compétence inférieure. Bien que le contenu du livre soit très bon et que Brandon soit excellent pour démontrer dans le code ce que la théorie décrit, j'ai l'impression que le livre dans son ensemble est beaucoup trop complexe pour que le développeur débutant puisse sortir quelque chose de tangible.
La communauté PHP en général, me semble-t-il, souffre d'une sorte de syndrome de «lien manquant» où nous avons les livres débutants absolus («Ceci est écho, c'est une fonction, c'est une balise PHP») Et les livres intermédiaires comme celui-ci, ou quoi que ce soit Sturgeon, Jones, Hartjes et d'autres ont éteint, mais il y a un terrain d'entente qui reste vide de contenu de qualité et ne peut être conquis que via le bon vieux «jetez-moi dans L'approche du feu.
Cela dit, si vous êtes un développeur intermédiaire qui cherche à se lancer dans les modèles et à sortir de ces hochements de tête maladroits aux conférences où les gens qui se tiennent autour de vous en parlent, mais vous ne comprenez rien - obtenez certainement ce livre. Si vous êtes un débutant, je ne peux pas vous recommander d'acheter ceci - pas encore. Maître vos «Echos» d'abord, apprenez ce qu'est le compositeur, puis enfoncez vos dents dans celui-ci.
En fait, si vous êtes un débutant avancé (les débutants devraient commencer par les bases) qui s'intéresse néanmoins par les modèles, je vous applaudie et je propose les ressources suivantes à examiner avant de plonger dans ce livre:
En ce qui concerne le contenu, je donnerais au livre un 4/5, mais en tenant compte du travail de précipitation, il semble que ce soit vers la fin, les fautes de frappe et les erreurs de langue (bien que pour être juste, il y a une soumission de frappe Github Repo que j'ai déjà pollué avec des correctifs) et le manque évident de conseils professionnels ainsi que certaines bizarreries qui, je crois, incorporeront personnellement de mauvaises valeurs dans les débutants qui trébuchent sur ce livre (commençant les noms de classe avec des nombres dans divers échantillons de code), je ' m terminant le score final à 3/5.
Les modèles de conception en PHP fournissent une solution réutilisable aux problèmes courants dans la conception de logiciels. Ils offrent un moyen d'améliorer l'efficacité et la maintenabilité de votre code. En utilisant des modèles de conception, vous pouvez rendre votre code plus flexible, réutilisable et compréhensible. Ils facilitent également la communication entre les développeurs, car ils fournissent une terminologie standard pour certaines solutions.
Quelle est la différence entre les systèmes de conception, les bibliothèques de motifs et les guides de style?
Comment puis-je réaliser la cohérence de conception à l'aide de bibliothèques de motifs?
Quel est le rôle de la refactorisation dans les modèles de conception?
Comment le livre «Practical Design Matterns in PHP» aide-t-il à comprendre les modèles de conception?
Non, les modèles de conception ne sont pas exclusifs à PHP. Ils sont un concept de conception de logiciels qui peut être appliqué à n'importe quel langage de programmation orienté objet. La mise en œuvre peut varier d'une langue à l'autre, mais les principes sous-jacents restent les mêmes.
Les modèles de conception fournissent une terminologie standard pour certaines solutions dans la conception de logiciels de conception . Lorsque les développeurs utilisent ces termes, ils transmettent un concept spécifique et bien compris, qui réduit les malentendus et améliore la communication.
Alors que les modèles de conception offrent de nombreux avantages , ils peuvent également introduire la complexité s'ils ne sont pas utilisés correctement. La surutilisation des modèles de conception peut conduire à une abstraction inutile et peut rendre le code plus difficile à comprendre et à maintenir. Par conséquent, il est important de les utiliser judicieusement et uniquement lorsqu'ils résolvent vraiment un problème récurrent.
La première étape pour mettre en œuvre des modèles de conception dans Vos projets PHP consiste à comprendre le problème que vous essayez de résoudre et d'identifier s'il s'agit d'un problème récurrent qu'un modèle de conception peut résoudre. Une fois que vous avez identifié un modèle de conception approprié, vous pouvez commencer à l'implémenter dans votre code. N'oubliez pas que l'objectif est de rendre votre code plus efficace et maintenable, alors gardez toujours à l'esprit la simplicité et la clarté.
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!