リファクタリングの実例1:第3回Advertisement責務の移動
現在残っている問題点を以下に示す。
修正版コード
Product クラス(変更点は強調文字で示す)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Product{
private String name;
private String teika;
public Product(String name, String teika){
this.name = name;
this.teika = teika;
}
public String getName(){
return this.name;
}
public String getTeika(){
return this.teika;
}
//エラーチェック
public boolean isError(){
return this.isNameErr() || this.isTeikaErr();
}
private boolean isNameErr(){
Pattern pattern = Pattern.compile("[A-Za-z0-9]+");
Matcher matcher = pattern.matcher(this.getName());
return !matcher.matches();
}
private boolean isTeikaErr(){
Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher(this.getTeika());
return !matcher.matches();
}
}
クライアント(変更点は強調文字で示す) /** * 製品を利用するクラス */ public class Main{ public static void main(String[] args){ // 製品の作成 Product product = new Product("name", "1000"); // エラー判定 if(product.isError()){ System.out.println("この製品は内部にエラーを含んでいます。"); }else{ System.out.println("この製品にエラーはありません。"); } } } 実際の効果
今までクライアント側で行っていたエラーチェックを Product クラスに移動した。オブジェクトが責任を持って処理を行う範囲のことを責務というが、今回はエラーチェックの責務をクライアントから Product クラスへ変更したことになる。
これにより、エラーチェック処理の一元管理が実現するため、ロジック変更の際に修正が発生するのは Product クラスのみとなる。 さて、最初のコードに比べると、かなりスッキリとしたコードになったが「エラーチェック処理のロジックは複数パターンあり、クライアントによって異なる。」という問題を解決できなくなってしまった。この問題を解決するためにさらなるリファクタリングが必要となる。 Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |