说一次且仅一次
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中文网其他相关文章!