Examen du Code partie 2: amélioration de la lisibilité et des performances de la classe filterwpquery

On peut arranger ça? Nous pouvons déplacer le contrôle nul dans la méthode. Vérifions le étape par étape. Étape 1: déplacer un contrôle nul la première étape consiste à repositionner le contrôle nul de la méthode Callback () et à lrsquoinsérer dans la méthode shouldfilter (). Il est facile de couper et coller drsquoune méthode à lrsquoautre.
Mais attendez, le contrôle nul dépend de lrsquoentrée donnée. Cela signifie que nous déclinons $postsornull comme paramètre de méthode. Fonction statique publique shouldfilter ($postsornull): bool
{Y}
Valider la demande de repos.
(! Did _ action (lsquorest API initrsquo) {
Renvoie False
}
Le contrôle est vide.
(! Is _ null ($postsornull)) {
Renvoie False
}
Renvoie True
Étape 2: Retournez lrsquoordre des masques pour améliorer les performances laissez moi poser une question. Que se passe t il si la méthode reçoit du contenu non nul? Regarde le Code. Que se passe t il?
Oui, il est retourné au faux dos et a fini son travail. Mais regardez le processus de contrôle. Tout drsquoabord, devez vérifier la demande de repos. Pensez à lrsquoordre des pions. Devrions nous vérifier les demandes de repos avant de vérifier ce qui a été reçu? La réponse à cette question dépend de la complexité du Code. Dans ce cas, il est plus efficace (plus rapide) drsquoinverser la séquence et drsquoeffectuer drsquoabord une vérification nulle. Pourquoi? Regarde le Code. La fonction PHP is _ NULL est très rapide, tandis que la fonction WordPress did action () a plus de code à traiter.
Lrsquoinversion de lrsquoordre nous permet drsquoeffectuer drsquoabord les contrôles les plus rapides. Par conséquent, en cas drsquoéchec, le Code est sauvegardé plus rapidement et retourné plus rapidement. Fonction statique publique shouldfilter ($postsornull): bool
{Y}
Le contrôle est vide.
(! Is _ null ($postsornull)) {
Renvoie False
}
Valider la demande de repos.
(! Did _ action (lsquorest API initrsquo) {
Renvoie False
}
Renvoie True
Étape 3: extraire le vérificateur de repos
Afin drsquoaméliorer la lisibilité, le Contrôleur rest demande maintenant un commentaire en ligne pour nous permettre de comprendre rapidement son intention (c. à D. ce qursquoil fait). Enlevons ce commentaire et je vais poser une question.
(did action (lsquorest API initrsquo) {} Vous comprenez rapidement lrsquointention de cette vérification? Non, je ne peux pas. Vous êtes drsquoaccord? Donc nous devons refaire ce code et le dire. Conseil de code: Faites nous savoir. Rendre lisible. Jrsquoaimerais mrsquoarrêter ici pour partager des conseils sur le Code avec . Le code doit être expressif et très lisible. Tu aurais dû nous dire ce qui srsquoest passé pour qursquoon puisse finir le travail rapidement. Crsquoest généralement un indice lorsque le Code a besoin drsquoun commentaire. Savez si devez le refaire en lisant le Code sans commentaires et en demandant: « puis je comprendre rapidement ce qui se passe? » votre réponse est non, crsquoest un remaniement.

{Y}
(! Is _ null ($postsornull)) {
Renvoie False
}
(! Static:: doingrest ()) {
Renvoie False
}
Renvoie True
}
* *
* vérifiez si WordPress exécute une requête rest.
* *
Renvoie booléen
*
Fonction statique privée do rest (): bool
{Y}
Retourner did _ action (lsquorest API initrsquo)
Notez que le nom de la méthode décrit le comportement de ce validateur. Nous nrsquoavons plus besoin de commentaires en ligne. Lorsque retournez ce code la semaine prochaine ou lrsquoannée prochaine, il enverra son m
Getposts () est assigné à la variable avant de retourner à lrsquoévénement filtre. Pourquoi? Il nrsquoest utilisé nulle part. Ce code est un exemple drsquoallocation inutile. Ici, nous pouvons simplement retourner tout ce que getposts () retourne. Rappel public de la fonction statique ($postsornull)
{Y}
(! Static:: shouldfilter ($postsornull)) {
Retourner $postsornull
}
Retourner statique:: getposts ()
Ce remaniement est préférable parce que: moins de code est lu et maintenu. Il fonctionne mieux (plus rapidement) parce que PHP nrsquoa pas besoin de créer des variables dans sa table de symboles. Il nrsquoest pas nécessaire drsquoassocier cette variable à lemplacement mémoire du tableau. Évitez la recherche de variables avant de revenir en arrière. Php nrsquoa besoin que drsquoune seule ligne de code. En lisant le livre PHP Internals, pouvez en savoir plus sur la façon dont PHP gère sa mémoire. Cet appel est trop général. Laissez nous dire ce qursquoil fait. Jrsquoai remarqué très tôt à quel point il était important que le Code nous dise ce qui srsquoest passé. Cela commence par la façon dont nous appelons les fonctions et les méthodes. Ce sont nos ouvriers. Ils font des choses. Ils devraient donc commencer par les verbes, puis décrire et exprimer leur comportement.
Rdcoded. Pourquoi? Restez avec moi pendant que je explique le processus de pensée. Cette classe a des attributs qui contiennent des valeurs de priorité. Il y a un moyen drsquoobtenir cette propriété. Supposons que vouliez le changer de 10 à 99. Pour faire ce changement, devez rappeler combien de places dans la classe avez changé? 3. oubliez de changer, que se passe t il? Il peut y avoir une erreur. En utilisant le principe Dry, nous essayons drsquoéliminer le Code redondant. Lrsquoune des raisons est drsquoéliminer le problème que je viens drsquoexpliquer. Comment résoudre ce problème? Cette propriété peut être utilisée lors de lrsquoajout ou de la suppression drsquoun crochet de filtre: * * * @ inheritdoc
Fonction statique commune addfilter (): bool
{Y}
Renvoie add filter (lsquoposts pre Queryrsquo, [filterwpquery:: class, lsquofilterprequeryrsquo], Static: $filterpriority)
}
Hériter du document
Fonction publique statique removefilter (): bool
{Y}
Retourner supprimer u filter (lsquoposts _ pre Queryrsquo, [filterwpquery:: class, lsquofilterprequeryrsquo, Static: $filterpriority)
Rappelons que jrsquoai beaucoup parlé dans cet article. Ensemble, nous avons examiné le processus drsquoexamen du Code pour améliorer la classe filterwpquery. Bien que cette classe soit petite, certaines améliorations ont été apportées à la qualité du Code. Regardons ce que nous faisons pour améliorer la lisibilité et la performance: lt?php
spazio dei nomi CalderaLearnRestSearch
**
* Filtro classeWPQuery
*
* Modifica l039oggetto WP_Query durante le richieste API REST
*
* @pacchetto CalderaLearnRestSearch
*
la classe FilterWPQuery implementa FiltersPreWPQuery
{
**
* Priorità per il filtro
*
* @var int
*
statico protetto $filterPriority = 10
**
* Dimostra come utilizzare un modo diverso per impostare i post restituiti da WP_Query
*
* @uses quotposts_pre_queryquot
*
* @param $postsOrNull
* @return WP_Post[]
*
callback di funzione statica pubblica ($postsOrNull)
{
Eseguito solo durante le richieste API di WordPress
if (static::shouldFilter()) {
Previeni le ricorsioni
Non eseguire se i messaggi sono già stati inviati
if (is_null($postsOrNull)) {
Ottieni dati fittizi
$postsOrNull = static::getPosts()
}
}
Restituisce sempre qualcosa, anche se è invariato
return $postsOrNull
}
** @inheritdoc *
funzione statica pubblica shouldFilter() :bool
{
return did_action(039rest_api_init039)
}
** @inheritdoc *
funzione statica pubblica addFilter() : bool
{
return add_filter(039posts_pre_query039, [FilterWPQuery::class, 039callback039], 10)
}
** @inheritdoc *
funzione pubblica statica removeFilter() : bool
{
return remove_filter(039posts_pre_query039, [FilterWPQuery::class, 039callback039], 10)
}
** @inheritdoc *
funzione statica pubblica getFilterPriority() : int
{
return static::$filterPriority
}
** @inheritdoc *
funzione statica pubblica getPosts() : array
{
Crea 4 post fittizi con titoli diversi
$mockPosts = []
for ($i = 0 $i Amélioration de la lisibilité

La méthode shouldfilter détermine si la classe doit être filtrée.

Inversez lrsquoordre des pièces.

Une nouvelle méthode privée a été créée pour nous faire savoir que WordPress traite les requêtes reposantes.

La décision de libération conditionnelle est annulée.

Lrsquoassignation de la variable qui renvoie le tableau à partir de getposts () est ignorée.

Il a donné un nom plus expressif à la méthode de rappel pour nous dire ce qursquoelle fait. Nous commençons le nom par un verbe parce que cette méthode fonctionne.

De plus, nous avons rendu le code plus concis
Ibile: remplace les entiers codés en dur dans les méthodes add et remove par des attributs de niveau de priorité. Toutes ces améliorations visent à améliorer la qualité du Code de classe. Quelle est la prochaine étape? Quel est le Code post générateur dans la méthode getposts ()? Je pense que nous en avons fait assez dans cet article. Crsquoest vrai? Nous poursuivons le processus drsquoexamen et drsquoamélioration du Code de la partie 3. Le Code final et chaque étape de remaniement sont enregistrés dans la requête pull sur github. Je invite à explorer. Qursquoen penses tu? Ces améliorations signifient elles quelque chose pour ? Non, sérieusement, jrsquoaimerais avoir ton avis. Apprenez comment chacune de ces politiques est mise en œuvre dans votre code à partir drsquoun processus détaillé. Jrsquoai hâte de discuter de ce processus drsquoexamen et de remaniement avec . Nrsquohésitez pas à me poser des questions et à partager vos commentaires dans les commentaires ci dessous.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

ContactPress Supported By WordPress Plugins