Thuaj një herë dhe vetëm një herë
TL;DR: Shmangni vërtetimet e dyfishta të emailit.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-x-i7r34uj
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvi
Kodi Smell 20 - Optimizimi i Parakohshëm
Identifikoni se ku logjika e vërtetimit të emailit është e dyfishuar.
Krijoni një klasë Email Address
për të përmbledhur rregullat e vlefshmërisë.
Kodi Refactor për të përdorur klasën Email Address
në vend të vargjeve të papërpunuara.
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; } }
Ky rifaktorim është i sigurt nëse zëvendësoni të gjitha shfaqjet e vargjeve të papërpunuara të postës elektronike me klasën 'EmailAddress' dhe siguroheni që të gjitha testet të kalojnë.
Ju e bëni vërtetimin e emailit të qëndrueshëm në të gjithë aplikacionin tuaj.
Meqenëse rregullat e vlefshmërisë janë të centralizuara në një vend, kodi bëhet më i lehtë për t'u ruajtur.
Ju gjithashtu zvogëloni rrezikun e gabimeve të shkaktuara nga logjika jokonsistente.
Në botën reale, Email Addresses
janë objekte të vogla që ekzistojnë dhe nuk janë vargje.
Kodi i rifaktoruar është më afër MAPPER-it të botës reale.
Vini re se emrat bijeksion janë thelbësorë. Do të ndihmonte për të krijuar një EmailAddress
, jo një Email
, pasi Email-i duhet të lidhet me mesazhin aktual.
Mos lejoni që Optimizuesit e Parakohshëm t'ju thonë se kjo zgjidhje ka një dënim të performancës.
Ata kurrë nuk bëjnë standarde aktuale me të dhënat e botës reale.
Pa udhëzime të duhura | Me udhëzime specifike |
---|---|
Imazhi nga Gerd Altmann në Pixabay
Ky artikull është pjesë e Serisë së Rifaktorimit.