paint-brush
Refactoring 019 - Paano Reify ang Mga Email Addresssa pamamagitan ng@mcsee
1,052 mga pagbabasa
1,052 mga pagbabasa

Refactoring 019 - Paano Reify ang Mga Email Address

sa pamamagitan ng Maximiliano Contieri4m2024/12/05
Read on Terminal Reader

Masyadong mahaba; Upang basahin

Iwasan ang mga dobleng pagpapatunay ng email.
featured image - Refactoring 019 - Paano Reify ang Mga Email Address
Maximiliano Contieri HackerNoon profile picture

Sabihin ito ng isang beses at isang beses lamang

TL;DR: Iwasan ang mga dobleng pagpapatunay ng email.

Mga Problema na Natugunan

Mga Kaugnay na Code Amoy

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

Code Smell 20 - Premature Optimization

Mga hakbang

  1. Tukuyin kung saan nadoble ang logic ng pagpapatunay ng email.


  2. Gumawa ng klase ng Email Address para i-encapsulate ang mga panuntunan sa pagpapatunay.


  3. Refactor code upang gamitin ang klase ng Email Address sa halip na mga hilaw na string.

Halimbawang Code

dati

 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; } }

Pagkatapos

 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; } }

Uri

  • [x] Semi-Awtomatiko

Kaligtasan

Ligtas ang refactoring na ito kung papalitan mo ang lahat ng paglitaw ng mga hilaw na string ng email ng klase ng 'EmailAddress' at masisigurong papasa ang lahat ng pagsubok.

Bakit Mas Mahusay ang Code?

Ginagawa mong pare-pareho ang pagpapatunay ng email sa iyong aplikasyon.


Dahil ang mga panuntunan sa pagpapatunay ay sentralisado sa isang lugar, nagiging mas madaling mapanatili ang code.


Binabawasan mo rin ang panganib ng mga bug na dulot ng hindi pantay na lohika.


Sa totoong mundo, Email Addresses ay maliliit na bagay na umiiral at hindi mga string.


Ang refactored code ay mas malapit sa real-world MAPPER .


Pansinin na ang mga pangalan ng bijection ay mahalaga. Makakatulong na lumikha ng isang EmailAddress , hindi isang Email , dahil ang Email ay dapat na mapa sa aktwal na mensahe.


Huwag hayaang sabihin sa iyo ng Premature Optimizators ang solusyon na ito ay may parusa sa pagganap.


Hindi sila kailanman gumagawa ng mga aktwal na benchmark sa real-world na data.

Refactor Gamit ang AI

Nang walang Wastong Tagubilin

Sa Mga Tukoy na Tagubilin

ChatGPT

ChatGPT

Claude

Claude

Pagkalito

Pagkalito

Copilot

Copilot

Gemini

Gemini

Mga tag

  • Encapsulation

Mga Kaugnay na Refactorings

Mga kredito

Larawan ni Gerd Altmann sa Pixabay


Ang artikulong ito ay bahagi ng Refactoring Series.

Paano Pahusayin ang Iyong Code Gamit ang Mga Madaling Refactoring