paint-brush
Refactoring 019 - Ինչպես վերականգնել էլփոստի հասցեներըկողմից@mcsee
1,052 ընթերցումներ
1,052 ընթերցումներ

Refactoring 019 - Ինչպես վերականգնել էլփոստի հասցեները

կողմից Maximiliano Contieri4m2024/12/05
Read on Terminal Reader

Չափազանց երկար; Կարդալ

Խուսափեք էլփոստի կրկնօրինակ վավերացումներից:
featured image - Refactoring 019 - Ինչպես վերականգնել էլփոստի հասցեները
Maximiliano Contieri HackerNoon profile picture

Ասա մեկ և միայն մեկ անգամ

TL;DR. Խուսափեք էլփոստի կրկնօրինակ վավերացումներից:

Խնդիրները հասցեագրված

Առնչվող կոդը հոտ է գալիս

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 - Վաղաժամ օպտիմիզացում

Քայլեր

  1. Բացահայտեք, թե որտեղ է էլփոստի վավերացման տրամաբանությունը կրկնօրինակված:


  2. Ստեղծեք Email Address դաս՝ վավերացման կանոնները ամփոփելու համար:


  3. Refactor կոդը՝ չմշակված տողերի փոխարեն Email Address դասը օգտագործելու համար:

Նմուշ կոդ

Նախկինում

 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] Կիսաավտոմատ

Անվտանգություն

Այս վերամշակումն ապահով է, եթե չմշակված էլփոստի տողերի բոլոր երևույթները փոխարինեք «EmailAddress» դասով և ապահովեք, որ բոլոր թեստերն անցնեն:

Ինչու է կոդը ավելի լավ:

Դուք հետևողական եք դարձնում էլփոստի վավերացումը ձեր դիմումում:


Քանի որ վավերացման կանոնները կենտրոնացված են մեկ տեղում, կոդը ավելի հեշտ է դառնում պահպանելը:


Դուք նաև նվազեցնում եք անհամապատասխան տրամաբանության հետևանքով առաջացած սխալների ռիսկը:


Իրական աշխարհում Email Addresses փոքր օբյեկտներ են, որոնք գոյություն ունեն և տողեր չեն:


Վերամշակված կոդը ավելի մոտ է իրական աշխարհի MAPPER- ին:


Ուշադրություն դարձրեք, որ բիեկցիոն անունները կարևոր են: Դա կօգնի ստեղծել EmailAddress , ոչ թե Email , քանի որ էլփոստը պետք է համապատասխանի իրական հաղորդագրությանը:


Թույլ մի տվեք, որ վաղաժամ օպտիմիզատորները ձեզ ասեն, որ այս լուծումն ունի կատարողականի տույժ:


Նրանք երբեք իրական չափորոշիչներ չեն անում իրական աշխարհի տվյալների հետ:

Refactor հետ AI

Առանց համապատասխան հրահանգների

Հատուկ հրահանգներով

ChatGPT

ChatGPT

Կլոդ

Կլոդ

Տարակուսանք

Տարակուսանք

Կոպիլոտ

Կոպիլոտ

Երկվորյակներ

Երկվորյակներ

Պիտակներ

  • Էկապսուլյացիա

Առնչվող վերամշակումներ

Վարկեր

Գերդ Ալթմանի պատկերը Pixabay- ում


Այս հոդվածը Refactoring Series-ի մի մասն է:

Ինչպես բարելավել ձեր կոդը հեշտ վերամշակմամբ