> 웹 프론트엔드 > JS 튜토리얼 > 리팩토링 - 이메일 주소 구체화

리팩토링 - 이메일 주소 구체화

Barbara Streisand
풀어 주다: 2024-12-25 16:50:15
원래의
845명이 탐색했습니다.

한 번만 말해 보세요

TL;DR: 중복 이메일 확인을 피하세요.

해결된 문제

  • 여러 곳에서 이메일 검증 논리가 반복됩니다.
  • 일관되지 않은 유효성 검사 규칙의 위험.
  • 유효성 검사 규칙을 유지하기가 어렵습니다.
  • 전단사 위반
  • 원시적 집착
  • 성급한 최적화

관련 코드 냄새

Refactoring  - Reify Email Addresses

코드 냄새 46 - 반복되는 코드

맥시 콘티에리 ・ 2020년 12월 8일

#앗 #코드뉴비 #지도 시간 #웹개발
Refactoring  - Reify Email Addresses

코드 스멜 122 - 원시적 집착

맥시 콘티에리 ・ 2022년 3월 17일

#앗 #웹개발 #지도 시간 #초보자
Refactoring  - Reify Email Addresses

코드 스멜 66 - 샷건 수술

맥시 콘티에리 ・ 2021년 4월 5일

#코드뉴비 #지도 시간 #앗 #웹개발
Refactoring  - Reify Email Addresses

코드 냄새 177 - 작은 물체 누락

맥시 콘티에리 ・ 2022년 11월 5일

#웹개발 #자바스크립트 #초보자 #프로그램 작성
Refactoring  - Reify Email Addresses

코드 냄새 20 - 조기 최적화

맥시 콘티에리 ・ 2020년 11월 8일

#앗 #개발 중 #코딩 #코드냄새

단계

  1. 이메일 확인 로직이 중복되는 위치를 식별하세요.
  2. 유효성 검사 규칙을 캡슐화하기 위해 이메일 주소 클래스를 만듭니다.
  3. 원시 문자열 대신 이메일 주소 클래스를 사용하도록 코드를 리팩터링합니다.

샘플 코드

전에

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에 더 가깝습니다

전단사 이름은 필수입니다. 이메일은 실제 메시지에 매핑되어야 하므로 '이메일'이 아닌 '이메일 주소'를 생성하는 것이 도움이 됩니다.

조기 최적화 프로그램이 성능 저하가 있다고 말하지 않도록 하세요.

실제 데이터로 실제 벤치마크를 수행하지 않습니다.

AI를 사용한 리팩터링

Without Proper Instructions With Specific Instructions
ChatGPT ChatGPT
Claude Claude
Perplexity Perplexity
Copilot Copilot
Gemini Gemini

태그

  • 캡슐화

관련 리팩토링

Refactoring  - Reify Email Addresses

007 리팩토링 - 클래스 추출

맥시 콘티에리 ・ 2022년 7월 4일

#웹개발 #초보자 #자바스크립트 #지도 시간
Refactoring  - Reify Email Addresses

리팩토링 012 - 연관 배열 구체화

맥시 콘티에리 ・ 2023년 11월 19일

#웹개발 #프로그램 작성 #초보자 #php
Refactoring  - Reify Email Addresses

리팩토링 002 - 추출 방법

맥시 콘티에리 ・ 2021년 11월 25일

#리팩토링 #앗 #웹개발 #코드뉴비

크레딧

Pixabay의 Gerd Altmann 이미지


이 글은 리팩토링 시리즈의 일부입니다.

Refactoring  - Reify Email Addresses

손쉬운 리팩토링으로 코드를 개선하는 방법

맥시 콘티에리 ・ 2022년 10월 24일

#웹개발 #초보자 #프로그램 작성 #지도 시간

위 내용은 리팩토링 - 이메일 주소 구체화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿