說一次且僅一次
TL;DR:避免重複的電子郵件驗證。
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」類別並確保所有測試都通過,則此重構是安全的。
您可以使電子郵件驗證在整個應用程式中保持一致。
由於驗證規則集中在一個地方,程式碼變得更容易維護。
您也可以降低因邏輯不一致而導致錯誤的風險。
在現實世界中,電子郵件地址是存在的小對象,而不是字串。
重構後的程式碼更接近現實世界的MAPPER
請注意,雙射名稱是必不可少的。建立「電子郵件地址」而不是「電子郵件」會有所幫助,因為電子郵件應該對應到實際訊息。
不要讓不成熟的優化器告訴您這會降低效能。
他們從不使用真實世界的數據進行實際基準測試。
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
圖片由 Gerd Altmann 在 Pixabay上
本文是重構系列的一部分。
以上是重構 - Reify 電子郵件地址的詳細內容。更多資訊請關注PHP中文網其他相關文章!