Sebut sekali dan hanya sekali
TL;DR: Elakkan pengesahan e-mel pendua.
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] Separuh Automatik
Pemfaktoran semula ini selamat jika anda menggantikan semua kejadian rentetan e-mel mentah dengan kelas 'EmailAddress' dan memastikan semua ujian lulus.
Anda membuat pengesahan e-mel konsisten di seluruh permohonan anda.
Memandangkan peraturan pengesahan dipusatkan di satu tempat, kod menjadi lebih mudah untuk dikekalkan.
Anda juga mengurangkan risiko pepijat yang disebabkan oleh logik yang tidak konsisten.
Di dunia nyata, Alamat E-mel ialah objek kecil yang wujud dan bukan rentetan.
Kod yang difaktorkan semula lebih dekat dengan MAPPER dunia sebenar
Perhatikan bahawa nama bijection adalah penting. Ia akan membantu untuk membuat 'Alamat E-mel', bukan 'E-mel', kerana E-mel harus dipetakan kepada mesej sebenar.
Jangan biarkan Pengoptimum Pramatang memberitahu anda bahawa ini mempunyai penalti prestasi.
Mereka tidak pernah melakukan penanda aras sebenar dengan data dunia sebenar.
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
Imej oleh Gerd Altmann di Pixabay
Artikel ini adalah sebahagian daripada Siri Pemfaktoran Semula.
Atas ialah kandungan terperinci Pemfaktoran Semula - Reify Alamat E-mel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!