リファクタリング
※きちんとまとまっていないけれど、なんとなく公開。
参考程度に。
リファクタリング
- リファクタリングとは
リファクタリングとは何か。どのような利点があるか。
リファクタリング一覧
- 値から参照への変更
- アルゴリズムの取り替え
- 委譲による継承の置き換え
- 委譲の隠蔽
- 一時変数のインライン化
- 一時変数の分離
- インタフェースの抽出
- オブジェクトそのものの受け渡し
- オブジェクトによるデータ値の置き換え
- オブジェクトによる配列の置き換え
- 階層の抽出
- 階層の平坦化
- 観察されるデータの複製
- ガード節による入れ子条件記述の置き換え
- 外部メソッドの導入
- 局所的拡張の導入
- クラスによるタイプコードの置き換え
- クラスのインライン化
- クラスの抽出
- 継承による委譲の置き換え
- 継承の分割
- コレクションのカプセル化
- コンストラクタ本体の引き上げ
- サブクラスによるタイプコードの置き換え
- サブクラスの抽出
- 参照から値への変更
- シンボリック定数によるマジックナンバーの置き換え
- 自己カプセル化フィールド
- 条件記述の統合
- 条件記述の分解
- 条件判定による例外の置き換え
- State/Strategyによるタイプコードの置き換え
- スーパークラスの抽出
- 制御フラグの削除
- setメソッドの削除
- 説明用変数の導入
- 双方向関連の単方向への変更
- 単方向関連の双方向への変更
- ダウンキャストのカプセル化
- 仲介人の除去
- 重複した条件記述の断片の統合
- 手続き的な設計からオブジェクトへの変換
- Template Methodの形成
- データクラスによるレコードの置き換え
- 問い合わせと更新の分離
- 問い合わせによる一時変数の置き換え
- ヌルオブジェクトの導入
- パラメータへの代入の除去
- 引数の削除
- 引数の追加
- 引数オブジェクトの導入
- 表明の導入
- Factory Methodによるコンストラクタの置き換え
- フィールドによるサブクラスの置き換え
- フィールドのカプセル化
- フィールドの移動
- フィールドの引き下げ
- フィールドの引き上げ
- プレゼンテーションとドメイン分離
- ポリフォーフィズムによる条件記述の置き換え
- 明示的なメソッド群による引数の置き換え
- メソッドによる引数の置き換え
- メソッドのインライン化
- メソッドのパラメータ化
- メソッドの移動
- メソッドの引き下げ
- メソッドの引き上げ
- メソッドの隠蔽
- メソッドの抽出
- メソッドオブジェクトによるメソッドの置き換え
- メソッド名の変更
- 例外によるエラーコードの置き換え
参考
J2EEリファクタリング
プレゼンテーション層
- コントローラの導入
- 同期トークンの導入
重複リクエスト対策 - 共通点のないロジックの局所化
- プレゼンテーション層固有の詳細をビジネス層から隠す
- ビューから変換処理を取り除く
- リソースをクライアントから隠す
ビジネス層とインテグレーション層
- エンティティBeanをセッションBeanでラップする
- Business Delegateの導入
- セッションBeanの統合
- エンティティBean間の通信をなくす
- ビジネスロジックをセッションBeanに移す
一般
- データアクセスコードの分離
- 多層アプローチによるアーキテクチャのリファクタリング
- 接続プールの利用
参考
実際のリファクタリング
- リファクタリングの実例1-1
サンプルプログラムの問題点を発見する。 - リファクタリングの実例1-2
カプセル化を行う。 - リファクタリングの実例1-3
責務を適切なクラスに移動する。 - リファクタリングの実例1-4
インタフェースを使用する。
- リファクタリングの実例2-1
すべてをひとまとめにしたクラス - リファクタリングの実例2-2
インタフェースを使用し、クラスを適切に分割する。 - リファクタリングの実例2-3
共通メソッド・変数の引き上げを行う。 - リファクタリングの実例2-4
変数を適切な場所に移動する。抽象クラスの導入を行う。
- リファクタリングの実例3
従来のエラー処理を例外に置き換える。
リファクタリング
リファクタリングとは何か
リファクタリング(Refactoring)
プログラムの振る舞いは変更せずにソースコードを変更すること。短い開発期間・多くの仕様変更などが原因で冗長となったコードを修正することにより、多くの恩恵を得ることができる。
リファクタリングで得られる利点
- 設計の改善
- コードの可読性向上
- バグの予防
- 素早いプログラミングの実現
- 保守性の向上
リファクタリングはXP(eXtreme Programming)の重要なプラクティスのひとつであり、アジャイル開発プロセス(機敏にソフトウェアを開発する方法)を実現するために重要な要素となっている。
リファクタリングを経験していくうちに、「どのような設計を行ったらよいのか」「どのような設計を行ってはいけないのか」ということが理解できるようになるため、質の高い設計が身に付いていく。

