ເວົ້າມັນຄັ້ງດຽວເທົ່ານັ້ນ
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 - ການເພີ່ມປະສິດທິພາບກ່ອນໄວອັນຄວນ
ລະບຸບ່ອນທີ່ເຫດຜົນການກວດສອບອີເມວຖືກຊໍ້າກັນ.
ສ້າງຫ້ອງຮຽນ Email Address
ເພື່ອ encapsulate ກົດລະບຽບການກວດສອບ.
ລະຫັດ 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; } }
ການ refactoring ນີ້ປອດໄພຖ້າຫາກວ່າທ່ານທົດແທນການປະກົດຕົວທັງຫມົດຂອງສະຕຣິງອີເມລ໌ດິບດ້ວຍຫ້ອງຮຽນ 'EmailAddress' ແລະໃຫ້ແນ່ໃຈວ່າການທົດສອບທັງຫມົດຜ່ານ.
ທ່ານເຮັດໃຫ້ການກວດສອບອີເມລ໌ສອດຄ່ອງທົ່ວຄໍາຮ້ອງສະຫມັກຂອງທ່ານ.
ເນື່ອງຈາກກົດລະບຽບການກວດສອບຖືກລວມຢູ່ໃນບ່ອນດຽວ, ລະຫັດໄດ້ກາຍເປັນງ່າຍຕໍ່ການຮັກສາ.
ນອກນັ້ນທ່ານຍັງຫຼຸດຜ່ອນຄວາມສ່ຽງຂອງແມງໄມ້ທີ່ເກີດຈາກເຫດຜົນບໍ່ສອດຄ່ອງ.
ໃນໂລກທີ່ແທ້ຈິງ, Email Addresses
ແມ່ນ ວັດຖຸຂະຫນາດນ້ອຍ ທີ່ມີຢູ່ແລະບໍ່ແມ່ນສາຍ.
ລະຫັດທີ່ refactored ແມ່ນໃກ້ຊິດກັບ MAPPER ໂລກທີ່ແທ້ຈິງ.
ສັງເກດເຫັນວ່າຊື່ bijection ເປັນສິ່ງຈໍາເປັນ. ມັນຈະຊ່ວຍໃຫ້ການສ້າງ EmailAddress
, ບໍ່ແມ່ນ Email
, ເນື່ອງຈາກວ່າ Email ຄວນສ້າງ ແຜນ ທີ່ກັບຂໍ້ຄວາມຕົວຈິງ.
ຢ່າປ່ອຍໃຫ້ ຜູ້ເພີ່ມປະສິດທິພາບກ່ອນໄວອັນ ຄວນບອກເຈົ້າວ່າການແກ້ໄຂນີ້ມີຜົນບັງຄັບໃຊ້.
ພວກເຂົາບໍ່ເຄີຍເຮັດມາດຕະຖານຕົວຈິງກັບຂໍ້ມູນໃນໂລກທີ່ແທ້ຈິງ.
ໂດຍບໍ່ມີການຄໍາແນະນໍາທີ່ເຫມາະສົມ | ດ້ວຍຄໍາແນະນໍາສະເພາະ |
---|---|
ຮູບພາບໂດຍ Gerd Altmann ໃນ Pixabay
ບົດຄວາມນີ້ແມ່ນສ່ວນຫນຶ່ງຂອງຊຸດການທົບທວນ.