ホームページ > ウェブフロントエンド > jsチュートリアル > リファクタリング - 電子メール アドレスを具体化する

リファクタリング - 電子メール アドレスを具体化する

Barbara Streisand
リリース: 2024-12-25 16:50:15
オリジナル
849 人が閲覧しました

一度だけ言ってください

TL;DR: 重複した電子メール検証を避けてください。

対処された問題

  • 複数の場所で電子メール検証ロジックが繰り返されます。
  • 検証ルールが矛盾するリスクがあります。
  • 検証ルールを維持するのが難しい。
  • 全単射違反
  • 原始的な強迫観念
  • 時期尚早な最適化

関連コードの匂い

Refactoring  - Reify Email Addresses

コードの匂い 46 - 繰り返されるコード

Maxi Contieri ・ 2020年12月8日

#おっと #コード初心者 #チュートリアル #webdev
Refactoring  - Reify Email Addresses

コードの匂い 122 - 原始的な強迫観念

Maxi Contieri ・ 2022 年 3 月 17 日

#おっと #webdev #チュートリアル #初心者
Refactoring  - Reify Email Addresses

コード・スメル 66 - ショットガン手術

Maxi Contieri ・ 2021年4月5日

#コード初心者 #チュートリアル #おっと #webdev
Refactoring  - Reify Email Addresses

コードの匂い 177 - 小さな物体が欠けている

Maxi Contieri ・ 2022 年 11 月 5 日

#webdev #javascript #初心者 #プログラミング
Refactoring  - Reify Email Addresses

コードの匂い 20 - 時期尚早な最適化

Maxi Contieri ・ 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」クラスに置き換え、すべてのテストに合格することを確認すれば、このリファクタリングは安全です。

なぜコードの方が優れているのでしょうか?

アプリケーション全体で電子メール検証の一貫性を保ちます。

検証ルールが 1 か所に集中されるため、コードの保守が容易になります。

ロジックの不一致によって発生するバグのリスクも軽減されます。

現実の世界では、電子メール アドレスは存在する小さなオブジェクトであり、文字列ではありません。

リファクタリングされたコードは現実世界の MAPPER に近くなります

全単射名が必須であることに注意してください。 Email は実際のメッセージにマッピングする必要があるため、「Email」ではなく「EmailAddress」を作成すると便利です。

時期尚早の最適化者に、これにはパフォーマンスが低下すると言わせないでください。

彼らは現実世界のデータを使って実際のベンチマークを行うことはありません。

AIによるリファクタリング

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

タグ

  • カプセル化

関連するリファクタリング

Refactoring  - Reify Email Addresses

リファクタリング 007 - クラスの抽出

Maxi Contieri ・ 2022 年 7 月 4 日

#webdev #初心者 #javascript #チュートリアル
Refactoring  - Reify Email Addresses

リファクタリング 012 - 連想配列の具体化

Maxi Contieri ・ 2023 年 11 月 19 日

#webdev #プログラミング #初心者 #php
Refactoring  - Reify Email Addresses

リファクタリング 002 - メソッドの抽出

マキシ・コンティエリ ・ 2021年11月25日

#リファクタリング #おっと #webdev #コード初心者

クレジット

Pixabay 上の Gerd Altmann による画像


この記事はリファクタリング シリーズの一部です。

Refactoring  - Reify Email Addresses

簡単なリファクタリングでコードを改善する方法

Maxi Contieri ・ 2022 年 10 月 24 日

#webdev #初心者 #プログラミング #チュートリアル

以上がリファクタリング - 電子メール アドレスを具体化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート