Sag es einmal und nur einmal
TL;DR: Vermeiden Sie doppelte E-Mail-Validierungen.
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] Halbautomatisch
Dieses Refactoring ist sicher, wenn Sie alle Vorkommen von Roh-E-Mail-Strings durch die Klasse „EmailAddress“ ersetzen und sicherstellen, dass alle Tests bestanden werden.
Sie sorgen für eine konsistente E-Mail-Validierung in Ihrer gesamten Anwendung.
Da die Validierungsregeln an einem Ort zentralisiert sind, ist der Code einfacher zu warten.
Sie verringern außerdem das Risiko von Fehlern, die durch inkonsistente Logik verursacht werden.
In der realen Welt sind E-Mail-Adressen kleine existierende Objekte und keine Zeichenfolgen.
Der überarbeitete Code kommt dem realen MAPPER näher
Beachten Sie, dass Bijektionsnamen unerlässlich sind. Es wäre hilfreich, eine „EmailAddress“ und keine „E-Mail“ zu erstellen, da die E-Mail der eigentlichen Nachricht zugeordnet werden sollte.
Lassen Sie sich von vorzeitigen Optimierern nicht sagen, dass dies zu Leistungseinbußen führt.
Sie führen niemals tatsächliche Benchmarks mit realen Daten durch.
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
Bild von Gerd Altmann auf Pixabay
Dieser Artikel ist Teil der Refactoring-Reihe.
Das obige ist der detaillierte Inhalt vonRefactoring – E-Mail-Adressen neu definieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!