Maison >interface Web >js tutoriel >Refactoring - Réifier les adresses e-mail
Dites-le une et une seule fois
TL;DR : évitez les validations d'e-mails en double.
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; } }
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; } }
[X] Semi-automatique
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.
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.
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
Image de Gerd Altmann sur Pixabay
Cet article fait partie de la série Refactoring.
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!