Révision des spécifications partie 1: correction des défauts de conception par des stratégies \
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 l’ai contacté. En tant qu’éducateur, il m’a conseillé de revoir le Code et de publier mon opinion dans une série d’articles sur torque en tant que compagnon de sa série. Dans cette série d’examens de la qualité du Code, je décrirai une ou plusieurs possibilités de qualité du Code et vous fournirai des détails et des aperçus pour vous aider à améliorer votre code. Commençons par la méthode posts _ pre Query dans sa classe filterwpquery:
<?php
classe FilterWPQuery
{
funzione statica pubblica posts_pre_query( $postsOrNull, $query ) {
//Eseguito solo durante le richieste API di WordPress
if ( definito( 'REST_REQUEST' ) && REST_REQUEST ) {
//Previeni le ricorsioni
remove_filter( 'posts_pre_query', [ FilterWPQuery::class, 'posts_pre_query' ], 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]] – > Filter = \
}
Renvoie un tableau fictif de messages fictifs
Retour à $Simulation post;
}
Toujours renvoyer quelque chose même s’il n’a pas changé
Retourner $postsornull;
}
}
} Que remarquez – vous lorsque vous regardez la structure de cette méthode? Concentrez – vous sur le repos. Notez qu’il y a plus de conditions imbriquées. Quelle est la logique opérationnelle ou l’intention 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 vous fournir une stratégie de mise en oeuvre pour identifier et reconstruire ces modèles dans votre code. Pour illustrer mon point de vue, j’utiliserai l’expression « go \/ no go » dans la journée de production pour décrire les résultats des conditions. L’état « Go » indique que le contrôle est passé et que le processus peut se poursuivre. L’état interdit indique que le contrôle a échoué et que le processus doit s’arrêter.
Voir le Code Josh ci – dessus pour plus de détails sur les critères. Quand une condition passe, c’est un \
Et s’il échoue et trouve un endroit \
La condition identifie une condition interdite. Cette interdiction est un point d’arrêt, ce qui signifie que lorsque vous trouvez un point d’arrêt, vous ne voulez pas que le code sous – jacent fonctionne. Cet organigramme vous aidera à visualiser les chemins dans votre code:
L’effet de cette conception imparfaite est que le point de sortie \
Cette stratégie n’est 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, c’est 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, vous vous dites: \
Faites le travail.
}
Je veux que tu changes d’avis. Changez votre pensée en: \
Si ce n’est pas vrai…
Retour \/ \/ enregistrer
}
Faites le travail. Veuillez noter que l’accent est mis sur la détermination si la fonction doit être poursuivie. Sinon, la fonction s’arrête et retourne au point où la condition détermine qu’elle doit s’arrêter et sortir. Pourquoi cette approche est – elle meilleure? Cette approche résout les problèmes énumérés ci – dessus: interdire d’arrêter immédiatement le traitement. Communiquer clairement l’intention. 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 l’intention du programmeur. Kent Beck, Best Practices Models for smalltalk, et bien plus encore. Avec cette politique, vous rejetez la logique d’affaires de la méthode et la déplacez en ligne à gauche afin qu’elle défile verticalement le long de la page lorsque vous lisez le Code. Pourquoi mieux? Lorsque vous 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 d’entreprise, les problèmes augmentent exponentiellement. Plus le Code est emballé et imbriqué, plus il est complexe, plus il est difficile de lire et d’acheter
Qu’est – ce qui s’est 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, l’é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, vous pouvez l’inverser et le convertir du correcteur \
Communication de conception actuelle: « s’il s’agit d’une demande de repos, ce bloc de contrôle s’écoule.» Inversement: \
Si (! Défini (‘rest _ request’) |! Rest _ Request) {
Retourner $postsornull
} notez comment cette conception met l’accent sur (1) L’identification des conditions « sans passage » et (2) la sortie immédiate en cas d’événement. Cette conception indique clairement pourquoi elle existe dans le Code. La nouvelle conception est une clause de protection parce qu’elle protège la méthode contre les « interdictions » et qu’elle revient rapidement après avoir trouvé la méthode. Étape 2: inverser la condition suivante nous répétons cette procédure pour l’expression de condition suivante. Communication de conception actuelle: « si la valeur d’entrée est nulle, elle s’écoule dans le bloc de contrôle.» En mettant l’accent sur la recherche \
Si (! Is _ null ($postsornull)) {
Retourner $postsornull;
Notez comment cette conception met l’accent sur l’identification 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 l’é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 l’étape de remaniement ci – dessus: la fonction statique publique posts _ pre Query ($postsornull, $QUERY) {
\/ \/ Save if not a WordPress rest request.
Si (! Define (‘rest _ request’) |! Rest _ Request) {
Retourner $postsornull;
}
Relâchez pour éviter la récursion.
Supprimer le filtre U (‘posts _ pre Query’, ‘filterwpquery:: class,’ posts pre Query ‘, 10);
Si vous avez envoyé un message, sauvegardez – le.
Si (! Is _ null ($postsornull) {
Retourner $postsornull;
}
\/ \/ simuler recevoir des messages en créant 4 messages fictifs avec des titres différents.
$Simulation post = [];
Pour ($i = 0; $I Post _ title = \
$mockposts [$i]] – > Filter = \
}
Retour à $Simulation 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 vous avez besoin d’un commentaire pour le clarifier. Lors de la conception du Code, demandez – vous si le reste du Code ne devrait pas être exécuté si cette vérification échoue. Si 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. Sinon, 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 – vous que votre code communique clairement son intention. Rendre lisible. Ce faisant, vous améliorerez immédiatement la qualité de son Code. Cette stratégie vous a – t – elle été utile? Qu’en penses – tu? Tu vois la valeur d’un retour plus tôt? Êtes – vous d’accord (ou en désaccord) pour mieux communiquer l’intention tout en protégeant le flux normal de contrôle de la fonction? J’aimerais avoir votre avis. Partagez ci – dessous. De plus, n’hésitez pas à me poser des questions sur la mise en oeuvre, l’inversion des modèles ou des indices. Je suis venu vous aider.