En lisant le premier article de la série WordPress Advanced oop de Josh Pollock, j’ai remarqué des possibilités d’améliorer la qualité et la performance du Code. Alors je lrsquoai contacté. En tant qursquoéducateur, il mrsquoa conseillé de revoir le Code et de publier mon opinion dans une série drsquoarticles sur torque en tant que compagnon de sa série. Dans cette série drsquoexamens de la qualité du Code, je décrirai une ou plusieurs possibilités de qualité du Code et fournirai des détails et des aperçus pour aider à améliorer votre code. Commençons par la méthode posts _ pre Query dans sa classe filterwpquery:
lt?php
classe FilterWPQuery
{
funzione statica pubblica posts_pre_query( $postsOrNull, $query ) {
Eseguito solo durante le richieste API di WordPress
if ( definito( 039REST_REQUEST039 ) ampamp REST_REQUEST ) {
Previeni le ricorsioni
remove_filter( 039posts_pre_query039, [ FilterWPQuery::class, 039posts_pre_query039 ], 10 )
Non eseguire se i messaggi sono già stati inviati
if ( is_null( $postsOrNull ) ) {
Crea 4 post fittizi con titoli diversi
$mockPosts = []
for ( $i = 0 $i Post _ title =
$mockposts [$i]] gt Filter =
}
Renvoie un tableau fictif de messages fictifs
Retour à $mulation post
}
Toujours renvoyer quelque chose même srsquoil nrsquoa pas changé
Retourner $postsornull
}
}
} Que remarquez lorsque regardez la structure de cette méthode? Concentrez sur le repos. Notez qursquoil y a plus de conditions imbriquées. Quelle est la logique opérationnelle ou lrsquointention principale de la méthode? Il est emballé dans ces conditions.
Cette conception est une mauvaise pratique de codage et une conception imparfaite. Examinons les raisons dans le reste de cet article. Alors toi et moi allons refaire son code étape par étape. Enfin, je vais fournir une stratégie de mise en oeuvre pour identifier et reconstruire ces modèles dans votre code. Pour illustrer mon point de vue, jrsquoutiliserai lrsquoexpression « go no go » dans la journée de production pour décrire les résultats des conditions. Lrsquoétat « Go » indique que le contrôle est passé et que le processus peut se poursuivre. Lrsquoétat interdit indique que le contrôle a échoué et que le processus doit srsquoarrêter.
Voir le Code Josh ci dessus pour plus de détails sur les critères. Quand une condition passe, crsquoest un
Et srsquoil échoue et trouve un endroit
La condition identifie une condition interdite. Cette interdiction est un point drsquoarrêt, ce qui signifie que lorsque trouvez un point drsquoarrêt, ne voulez pas que le code sous jacent fonctionne. Cet organigramme aidera à visualiser les chemins dans votre code: Notez que lrsquoinhibition saute le flux de contrôle normal (c. à d. La logique drsquoentreprise), le contourne et se dirige vers la fin de la méthode. En drsquoautres termes, le traitement « interdit » se poursuit alors que le flux de contrôle normal ne lrsquoest pas. Crsquoest un défaut de conception. Crsquoest ce qursquoon veut, non? Nous ne voulons pas qursquoil continue à traiter et à rouler quand nous trouvons un
Lrsquoeffet de cette conception imparfaite est que le point de sortie
Cette stratégie nrsquoest pas nouvelle. En fait, Kent Beck a proposé pour la première fois la notion de clause de protection dans son ouvrage intitulé smalltalk Best Practices Model 1997. La méthode est le problème, commençons par comprendre le problème. Le problème, crsquoest la méthode. Lors de la conception de la fonction
Vous pouvez considérer les conditions qui déterminent si la ligne suivante de code doit être exécutée. Justification Dans votre esprit, dites:
Faites le travail.
}
Je veux que tu changes drsquoavis. Changez votre pensée en:
ce nrsquoest pas vrai
Retour enregistrer
}
Faites le travail. Veuillez noter que lrsquoaccent est mis sur la détermination si la fonction doit être poursuivie. non, la fonction srsquoarrête et retourne au point où la condition détermine qursquoelle doit srsquoarrêter et sortir. Pourquoi cette approche est elle meilleure? Cette approche résout les problèmes énumérés ci dessus: interdire drsquoarrêter immédiatement le traitement. Communiquer clairement lrsquointention. Le Code est plus lisible. Le Code dit clairement:
« les retours multiples simplifient le formatage du Code, en particulier les conditions. De plus, les versions à retour multiple des méthodes expriment généralement plus directement lrsquointention du programmeur. Kent Beck, Best Practices Models for smalltalk, et bien plus encore. Avec cette politique, rejetez la logique drsquoaffaires de la méthode et la déplacez en ligne à gauche afin qursquoelle défile verticalement le long de la page lorsque lisez le Code. Pourquoi mieux? Lorsque lisez et suivez le processus de contrôle du Code, il faut moins de cerveau pour gérer ce qui se passe dans le Code.
Avec la croissance de la logique drsquoentreprise, les problèmes augmentent exponentiellement. Plus le Code est emballé et imbriqué, plus il est complexe, plus il est difficile de lire et drsquoacheter
Qursquoest ce qui srsquoest passé et pourquoi? La lisibilité affecte directement la qualité du Code. Plus il est lisible, moins il faut de temps pour le comprendre, le tester, le réutiliser, lrsquoétendre et le maintenir. Remaniement progressif: conception inverse nous inversons le code ci dessus et analysons le processus de remaniement ensemble. Étape 1: inverser la première condition la première condition est le Contrôleur pass no pass. Détermine si la fonction continuera de fonctionner. Par conséquent, pouvez lrsquoinverser et le convertir du correcteur
Communication de conception actuelle: « srsquoil srsquoagit drsquoune demande de repos, ce bloc de contrôle srsquoécoule.» Inversement:
(! Défini (lsquorest _ requestrsquo) |! Rest _ Request) {
Retourner $postsornull
} notez comment cette conception met lrsquoaccent sur (1) Lrsquoidentification des conditions « sans passage » et (2) la sortie immédiate en cas drsquoévénement. Cette conception indique clairement pourquoi elle existe dans le Code. La nouvelle conception est une clause de protection parce qursquoelle protège la méthode contre les « interdictions » et qursquoelle revient rapidement après avoir trouvé la méthode. Étape 2: inverser la condition suivante nous répétons cette procédure pour lrsquoexpression de condition suivante. Communication de conception actuelle: « si la valeur drsquoentrée est nulle, elle srsquoécoule dans le bloc de contrôle.» En mettant lrsquoaccent sur la recherche
(! Is _ null ($postsornull)) {
Retourner $postsornull
Notez comment cette conception met lrsquoaccent sur lrsquoidentification des états « interdits ». Dans un premier temps, la conception indique clairement son intention et pourquoi elle existe dans le Code. Il nu
Ovo design est également une clause de sauvegarde. Étape 3: Étendre le Code principal lrsquoétape suivante consiste à déplacer la logique opérationnelle de la méthode au bas de la méthode, après la clause du tableau. Voici notre Code pour lrsquoétape de remaniement ci dessus: la fonction statique publique posts _ pre Query ($postsornull, $QUERY) {
Save if not a WordPress rest request.
(! Define (lsquorest _ requestrsquo) |! Rest _ Request) {
Retourner $postsornull
}
Relâchez pour éviter la récursion.
Supprimer le filtre U (lsquoposts _ pre Queryrsquo, lsquofilterwpquery:: class,rsquo posts pre Query lsquo, 10)
avez envoyé un message, sauvegardez le.
(! Is _ null ($postsornull) {
Retourner $postsornull
}
simuler recevoir des messages en créant 4 messages fictifs avec des titres différents.
$mulation post = []
Pour ($i = 0 $I Post _ title =
$mockposts [$i]] gt Filter =
}
Retour à $mulation post
Continue de lire. Il a des clauses de protection, chacune protégeant la méthode et arrêtant son exécution lorsque
Dites ce qui se passe, donc avez besoin drsquoun commentaire pour le clarifier. Lors de la conception du Code, demandez si le reste du Code ne devrait pas être exécuté si cette vérification échoue. la réponse est oui, arrêtez ici et sauvegardez la immédiatement. Déplacer toutes les conditions préalables en haut de la fonction signifie vérifier les données entrantes pour déterminer si la fonction doit fonctionner. non, utilisez la politique des clauses de protection pour protéger le Code. Pour les arrêts potentiels à mi chemin ou près de la fin du Code, utilisez la politique de retour anticipé. Surtout, assurez que votre code communique clairement son intention. Rendre lisible. Ce faisant, améliorerez immédiatement la qualité de son Code. Cette stratégie a t elle été utile? Qursquoen penses tu? Tu vois la valeur drsquoun retour plus tôt? Êtes drsquoaccord (ou en désaccord) pour mieux communiquer lrsquointention tout en protégeant le flux normal de contrôle de la fonction? Jrsquoaimerais avoir votre avis. Partagez ci dessous. De plus, nrsquohésitez pas à me poser des questions sur la mise en oeuvre, lrsquoinversion des modèles ou des indices. Je suis venu aider.
Révision des spécifications partie 1: correction des défauts de conception par des stratégies