首頁 > web前端 > js教程 > 重構 - Reify 電子郵件地址

重構 - Reify 電子郵件地址

Barbara Streisand
發布: 2024-12-25 16:50:15
原創
888 人瀏覽過

說一次且僅一次

TL;DR:避免重複的電子郵件驗證。

解決的問題

  • 在多個地方重複電子郵件驗證邏輯。
  • 驗證規則不一致的風險。
  • 難以維護驗證規則。
  • 雙射違規
  • 原始的痴迷
  • 過早優化

相關代碼異味

Refactoring  - Reify Email Addresses

程式碼味道 46 - 重複程式碼

馬克西·孔蒂耶里 ・2020 年 12 月 8 日

#哎呀 #codenewbie #教程 #webdev
Refactoring  - Reify Email Addresses

代碼氣味 122 - 原始痴迷

馬克西‧康泰里 ・ 22 年 3 月 17 日

#哎呀 #webdev #教程 #初學者
Refactoring  - Reify Email Addresses

代碼氣味 66 - 霰彈槍手術

馬克西·孔蒂耶里 ・ 21 年 4 月 5 日

#codenewbie #教程 #哎呀 #webdev
Refactoring  - Reify Email Addresses

代碼氣味 177 - 丟失小物體

馬克西·孔蒂耶里 ・22 年 11 月 5 日

#webdev #javascript #初學者 #程式設計
Refactoring  - Reify Email Addresses

程式碼氣味 20 - 過早優化

馬克西·孔蒂耶里 ・ 2020 年 11 月 8 日

#哎呀 #發展 #編碼 #codesmell

步驟

  1. 決定電子郵件驗證邏輯重複的位置。
  2. 建立一個Email Address類別來封裝驗證規則。
  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

請注意,雙射名稱是必不可少的。建立「電子郵件地址」而不是「電子郵件」會有所幫助,因為電子郵件應該對應到實際訊息。

不要讓不成熟的優化器告訴您這會降低效能。

他們從不使用真實世界的數據進行實際基準測試。

用人工智慧重構

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

標籤

  • 封裝

相關重構

Refactoring  - Reify Email Addresses

重建 007 - 提取類別

馬克西·孔蒂耶里 ・ 22 年 7 月 4 日

#webdev #初學者 #javascript #教程
Refactoring  - Reify Email Addresses

重構 012 - Reify 關聯數組

馬克西·孔蒂耶里 ・ 2023 年 11 月 19 日

#webdev #程式設計 #初學者 #php
Refactoring  - Reify Email Addresses

重建002 - 萃取方法

馬克西·孔蒂耶里 ・ 十一月 25 '21

#重構 #哎呀 #webdev #codenewbie

製作人員

圖片由 Gerd Altmann 在 Pixabay上


本文是重構系列的一部分。

Refactoring  - Reify Email Addresses

如何透過簡單的重構來改進程式碼

馬克西·孔蒂耶里 ・ 2022 年 10 月 24 日

#webdev #初學者 #程式設計 #教程

以上是重構 - Reify 電子郵件地址的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板