一度だけ言ってください
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」クラスに置き換え、すべてのテストに合格することを確認すれば、このリファクタリングは安全です。
アプリケーション全体で電子メール検証の一貫性を保ちます。
検証ルールが 1 か所に集中されるため、コードの保守が容易になります。
ロジックの不一致によって発生するバグのリスクも軽減されます。
現実の世界では、電子メール アドレスは存在する小さなオブジェクトであり、文字列ではありません。
リファクタリングされたコードは現実世界の MAPPER に近くなります
全単射名が必須であることに注意してください。 Email は実際のメッセージにマッピングする必要があるため、「Email」ではなく「EmailAddress」を作成すると便利です。
時期尚早の最適化者に、これにはパフォーマンスが低下すると言わせないでください。
彼らは現実世界のデータを使って実際のベンチマークを行うことはありません。
Without Proper Instructions | With Specific Instructions |
---|---|
ChatGPT | ChatGPT |
Claude | Claude |
Perplexity | Perplexity |
Copilot | Copilot |
Gemini | Gemini |
Pixabay 上の Gerd Altmann による画像
この記事はリファクタリング シリーズの一部です。
以上がリファクタリング - 電子メール アドレスを具体化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。