リファクタリングの定義
既存のソフトウェアについて外部から見たときの振る舞い(動き方)を 保ちつつ、理解や修正が簡単になるようにソフトウェアの内部構造を 変化させること
コードのにおい (ソースコードに深刻な問題が存在することを示す何らかの兆候)
以下のような項目をコードのにおいとして、リファクタリングの候補とします。
重複したコード 同じようなコードが複数箇所に存在する
長すぎるメソッド 1つのメソッド内の処理が長く、処理内容が多すぎる
巨大なクラス 1つのクラスが複数の責務を持っている
多すぎる引数 引数の数が多すぎてひとつひとつの意味が理解しづらい
変更の発散 1つのクラスを変更する理由が複数ある
変更の分散 1つの変更によって複数のクラスを変更しなければならない
スイッチ文 同じような分岐処理があちこちにある
疑わしき一般化 役に立たない抽象クラス、委譲、メソッドなどがある
相続拒否 サブクラスが継承した機能を使っていない
コメント コードのにおいの消臭剤に使われることがある
コードのにおいに対しての対応方法
重複したコード :メソッドの抽出、クラスの抽出、メソッドの引き上げ、Template Methodの形成
長すぎるメソッド :メソッドの抽出、問い合わせによる一時変数の置き換え、 メソッドオブジェクトによるメソッドの置き換え、条件記述の分解
巨大なクラス ク:ラスの抽出、サブクラスの抽出、インタフェースの抽出
多すぎる引数 メ:ソッドによる引数の置き換え、引数オブジェクトの導入、 オ ジェクトそのものの受け渡し
変更の発散 ク:ラスの抽出
変更の分散 メ:ソッドの移動、フィールドの移動、クラスのインライン化
スイッチ文 :ポリモーフィズムによる条件記述の置き換え、 サブクラスによるタイプコードの置き換え
疑わしき一般化 :階層の平坦化、クラスのインライン化、引数の削除、メソッド名の変更
相続拒否 委譲による継承の置き換え
コメント メソッドの抽出、表明の導入
リファクタリングの基本
事前にテストを作成しておくこと。テストの作成により、リファクタリングの前後で、機能に変更がないかを核にできます。