一度だけ言ってください
TL;DR: 重複した電子メール検証を避けてください。
対処された問題
-
複数の場所で電子メール検証ロジックが繰り返されます。
- 検証ルールが矛盾するリスクがあります。
- 検証ルールを維持するのが難しい。
-
全単射違反
- 原始的な強迫観念
- 時期尚早な最適化
関連コードの匂い
コードの匂い 46 - 繰り返されるコード
Maxi Contieri ・ 2020年12月8日
#おっと
#コード初心者
#チュートリアル
#webdev
コードの匂い 122 - 原始的な強迫観念
Maxi Contieri ・ 2022 年 3 月 17 日
#おっと
#webdev
#チュートリアル
#初心者
コード・スメル 66 - ショットガン手術
Maxi Contieri ・ 2021年4月5日
#コード初心者
#チュートリアル
#おっと
#webdev
コードの匂い 177 - 小さな物体が欠けている
Maxi Contieri ・ 2022 年 11 月 5 日
#webdev
#javascript
#初心者
#プログラミング
コードの匂い 20 - 時期尚早な最適化
Maxi Contieri ・ 2020年11月8日
#おっと
#現像
#コーディング
#コードスメル
ステップ
- メール検証ロジックが重複している場所を特定します。
- 検証ルールをカプセル化する電子メール アドレス クラスを作成します。
- 生の文字列の代わりに電子メール アドレス クラスを使用するようにコードをリファクタリングします。
サンプルコード
前に
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class Person {
private String emailAddress;
public void setEmailAddress(String emailAddress) {
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) {
if (!emailAddress.matches(
"^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$" )) {
throw new IllegalArgumentException(
"Invalid email address format" );
}
this.applicantEmailAddress = emailAddress;
}
}
|
ログイン後にコピー
後
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class EmailAddress {
private final String value;
public EmailAddress(String value) {
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) {
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 |
タグ
関連するリファクタリング
リファクタリング 007 - クラスの抽出
Maxi Contieri ・ 2022 年 7 月 4 日
#webdev
#初心者
#javascript
#チュートリアル
リファクタリング 012 - 連想配列の具体化
Maxi Contieri ・ 2023 年 11 月 19 日
#webdev
#プログラミング
#初心者
#php
リファクタリング 002 - メソッドの抽出
マキシ・コンティエリ ・ 2021年11月25日
#リファクタリング
#おっと
#webdev
#コード初心者
クレジット
Pixabay 上の Gerd Altmann による画像
この記事はリファクタリング シリーズの一部です。
簡単なリファクタリングでコードを改善する方法
Maxi Contieri ・ 2022 年 10 月 24 日
#webdev
#初心者
#プログラミング
#チュートリアル
以上がリファクタリング - 電子メール アドレスを具体化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。