paint-brush
Refactoring 019 - ວິທີການ Reify ທີ່ຢູ່ອີເມວໂດຍ@mcsee
258 ການອ່ານ

Refactoring 019 - ວິທີການ Reify ທີ່ຢູ່ອີເມວ

ໂດຍ Maximiliano Contieri4m2024/12/05
Read on Terminal Reader

ຍາວເກີນໄປ; ອ່ານ

ຫຼີກເວັ້ນການກວດສອບອີເມວຊໍ້າກັນ.
featured image - Refactoring 019 - ວິທີການ Reify ທີ່ຢູ່ອີເມວ
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 ເພື່ອ encapsulate ກົດລະບຽບການກວດສອບ.


  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] ເຄິ່ງອັດຕະໂນມັດ

ຄວາມປອດໄພ

ການ refactoring ນີ້ປອດໄພຖ້າຫາກວ່າທ່ານທົດແທນການປະກົດຕົວທັງຫມົດຂອງສະຕຣິງອີເມລ໌ດິບດ້ວຍຫ້ອງຮຽນ 'EmailAddress' ແລະໃຫ້ແນ່ໃຈວ່າການທົດສອບທັງຫມົດຜ່ານ.

ເປັນຫຍັງລະຫັດຈຶ່ງດີກວ່າ?

ທ່ານເຮັດໃຫ້ການກວດສອບອີເມລ໌ສອດຄ່ອງທົ່ວຄໍາຮ້ອງສະຫມັກຂອງທ່ານ.


ເນື່ອງຈາກກົດລະບຽບການກວດສອບຖືກລວມຢູ່ໃນບ່ອນດຽວ, ລະຫັດໄດ້ກາຍເປັນງ່າຍຕໍ່ການຮັກສາ.


ນອກນັ້ນທ່ານຍັງຫຼຸດຜ່ອນຄວາມສ່ຽງຂອງແມງໄມ້ທີ່ເກີດຈາກເຫດຜົນບໍ່ສອດຄ່ອງ.


ໃນໂລກທີ່ແທ້ຈິງ, Email Addresses ແມ່ນ ວັດຖຸຂະຫນາດນ້ອຍ ທີ່ມີຢູ່ແລະບໍ່ແມ່ນສາຍ.


ລະຫັດທີ່ refactored ແມ່ນໃກ້ຊິດກັບ MAPPER ໂລກທີ່ແທ້ຈິງ.


ສັງເກດເຫັນວ່າຊື່ bijection ເປັນສິ່ງຈໍາເປັນ. ມັນຈະຊ່ວຍໃຫ້ການສ້າງ EmailAddress , ບໍ່ແມ່ນ Email , ເນື່ອງຈາກວ່າ Email ຄວນສ້າງ ແຜນ ທີ່ກັບຂໍ້ຄວາມຕົວຈິງ.


ຢ່າປ່ອຍໃຫ້ ຜູ້ເພີ່ມປະສິດທິພາບກ່ອນໄວອັນ ຄວນບອກເຈົ້າວ່າການແກ້ໄຂນີ້ມີຜົນບັງຄັບໃຊ້.


ພວກເຂົາບໍ່ເຄີຍເຮັດມາດຕະຖານຕົວຈິງກັບຂໍ້ມູນໃນໂລກທີ່ແທ້ຈິງ.

ປະຕິກິລິຍາກັບ AI

ໂດຍບໍ່ມີການຄໍາແນະນໍາທີ່ເຫມາະສົມ

ດ້ວຍຄໍາແນະນໍາສະເພາະ

ChatGPT

ChatGPT

Claude

Claude

ສັບສົນ

ສັບສົນ

Copilot

Copilot

Gemini

Gemini

ປ້າຍກຳກັບ

  • ການຫຸ້ມຫໍ່

ທີ່ກ່ຽວຂ້ອງ

ສິນເຊື່ອ

ຮູບພາບໂດຍ Gerd Altmann ໃນ Pixabay


ບົດຄວາມນີ້ແມ່ນສ່ວນຫນຶ່ງຂອງຊຸດການທົບທວນ.

ວິທີການປັບປຸງລະຫັດຂອງທ່ານດ້ວຍການທົບທວນງ່າຍ

L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

ວາງປ້າຍ

ບົດ​ຄວາມ​ນີ້​ໄດ້​ຖືກ​ນໍາ​ສະ​ເຫນີ​ໃນ...