한 번만 말해 보세요
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 |
Pixabay의 Gerd Altmann 이미지
이 글은 리팩토링 시리즈의 일부입니다.
위 내용은 리팩토링 - 이메일 주소 구체화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!