Maison >interface Web >js tutoriel >Refactoring - Réifier les adresses e-mail

Refactoring - Réifier les adresses e-mail

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 16:50:15853parcourir

Dites-le une et une seule fois

TL;DR : évitez les validations d'e-mails en double.

Problèmes résolus

  • Logique de validation d'e-mail répétée à plusieurs endroits.
  • Risque de règles de validation incohérentes.
  • Difficile de maintenir les règles de validation.
  • Violation de bijection
  • Obsession primitive
  • Optimisation prématurée

Odeurs de code associées

Refactoring  - Reify Email Addresses

Code Odeur 46 - Code répété

Maxi Contieri ・ 8 décembre 20

#oop #codenewbie #tutoriel #webdev
Refactoring  - Reify Email Addresses

Code Odeur 122 - Obsession Primitive

Maxi Contieri ・ 17 mars 22

#oop #webdev #tutoriel #débutants
Refactoring  - Reify Email Addresses

Code Odeur 66 - Chirurgie au fusil de chasse

Maxi Contieri ・ 5 avril 21

#codenewbie #tutoriel #oop #webdev
Refactoring  - Reify Email Addresses

Code Odeur 177 - Petits objets manquants

Maxi Contieri ・ 5 novembre 22

#webdev #javascript #débutants #programmation
Refactoring  - Reify Email Addresses

Code Smell 20 - Optimisation prématurée

Maxi Contieri ・ 8 novembre 2020

#oop #développement #codage #odeurdecode

Mesures

  1. Identifiez où la logique de validation des e-mails est dupliquée.
  2. Créez une classe d'adresse e-mail pour encapsuler les règles de validation.
  3. Refactorisez le code pour utiliser la classe Email Address au lieu de chaînes brutes.

Exemple de code

Avant

public class Person {
    private String emailAddress;
    // Primitive Obsession

    public void setEmailAddress(String emailAddress) {
        // Duplicated code
        if (!emailAddress.matches(
            "^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$")) {
            throw new IllegalArgumentException(
                "Invalid email address format");
        }
        this.emailAddress = emailAddress;
    }
}

public class JobApplication {
    private String applicantEmailAddress;

    public void setApplicantEmailAddress(String emailAddress) {
        // Duplicated code
        if (!emailAddress.matches(
            "^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$")) {
            throw new IllegalArgumentException(
                "Invalid email address format");
        }
        this.applicantEmailAddress = emailAddress;
    }
}

Après

public class EmailAddress {
    // 2. Create an `EmailAddress` class to encapsulate validation rules.
    private final String value;

    public EmailAddress(String value) {
        // The rules are in a single place
        // And all objects are created valid
        if (!value.matches("^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$")) {
            throw new IllegalArgumentException(
                "Invalid email address format");
        }
        this.value = value;
    }
}

public class Person {
    private final EmailAddress emailAddress;

    public Person(EmailAddress emailAddress) {
        // 1. Identify where email validation logic is duplicated.
        // 3. Refactor code to use the `Email Address`
        // class instead of raw strings.
        // No validation is required
        this.emailAddress = emailAddress;
    } 
}

public class JobApplication {
    private EmailAddress applicantEmailAddress;

    public JobApplication(EmailAddress applicantEmailAddress) {
        this.applicantEmailAddress = applicantEmailAddress;
    }
}

Taper

[X] Semi-automatique

Sécurité

Cette refactorisation est sûre si vous remplacez toutes les occurrences de chaînes de courrier électronique brutes par la classe 'EmailAddress' et assurez-vous que tous les tests réussissent.

Pourquoi le code est-il meilleur ?

Vous assurez la cohérence de la validation des e-mails dans toute votre application.

Les règles de validation étant centralisées en un seul endroit, le code devient plus facile à maintenir.

Vous réduisez également le risque de bugs causés par une logique incohérente.

Dans le monde réel, les adresses e-mail sont de petits objets qui existent et ne sont pas des chaînes.

Le code refactorisé est plus proche du MAPPER du monde réel

Remarquez que les noms de bijection sont essentiels. Il serait utile de créer une « adresse e-mail », et non un « e-mail », puisque l'e-mail doit correspondre au message réel.

Ne laissez pas les optimiseurs prématurés vous dire que cela entraîne une pénalité en termes de performances.

Ils ne font jamais de véritables benchmarks avec des données du monde réel.

Refactoriser avec l'IA

Without Proper Instructions With Specific Instructions
ChatGPT ChatGPT
Claude Claude
Perplexity Perplexity
Copilot Copilot
Gemini Gemini

Balises

  • Encapsulation

Refactorisations associées

Refactoring  - Reify Email Addresses

Refactoring 007 - Extraire la classe

Maxi Contieri ・ 4 juillet 22

#webdev #débutants #javascript #tutoriel
Refactoring  - Reify Email Addresses

Refactoring 012 - Réifier les tableaux associatifs

Maxi Contieri ・ 19 novembre 23

#webdev #programmation #débutants #php
Refactoring  - Reify Email Addresses

Refactoring 002 - Méthode d'extraction

Maxi Contieri ・ 25 novembre 21

#refactoring #oop #webdev #codenewbie

Crédits

Image de Gerd Altmann sur Pixabay


Cet article fait partie de la série Refactoring.

Refactoring  - Reify Email Addresses

Comment améliorer votre code avec des refactorisations faciles

Maxi Contieri ・ 24 octobre 22

#webdev #débutants #programmation #tutoriel

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn