🧐
クソコード・リファクタリングパターン
前提
- ロジック・関数・クラスの改修ではにっちもさっちもどうにもならないクソコード
触れないこと
- 良い設計・実装方法
- テストのこと
絶対条件
- クソコードを再利用しようとしてはならない
- 用済みになったら即削除できる様にしておく
- コメントアウトやそのまま残す判断する人はリファクタリングする必要なし(違うクソコードを作るだけ)
- 用済みになったら即削除できる様にしておく
- 新しくディレクトリから作り直す
- ディレクトリから作り直さなくても大丈夫な程度なら
- 一発で対応しようと考えないこと
- 一発でリファクタリング完了ができるほど甘くない(できるならそこまでのクソコードにはならないだろう)
- 一回の影響範囲を小さくし、少量を早く対応し改善していくことが重要
- 大きい改修とすると失敗した時に再度対応する体力がなくなってしまう
- ビジネスもできなくなってしまう
トップダウンパターン
概要
アプリケーションの入口となる処理から改修を進める方法
※ここでは Controller を想定する
フロー
- アーキテクチャ(ディレクトリ構造)を決める
- ディレクトリを作成する
- 必要な時に必要なものを。
- Controller を新規追加する
- 処理は改修元をコピーする(参照ファイルは既存のままにしておく)
- 新規追加した Controller が実行される様に修正
- Controller が参照するクラスを新規追加する
- 新規追加したクラスに処理を追加する
- 共通処理な場合は、改修元の処理をコピーする
- 新規追加したクラスを参照する様に Controller 修正する
- 新規追加したクラスが参照するクラスを新規追加する
- 新規追加した処理を参照する様に修正
- 6~8 を繰り返し行う
ボトムアップパターン
※クソコードに手を入れる必要があるので今回の条件下ではアンチパターンです
概要
DBなどI/Oする処理の様に最下層(これ以上参照がない処理)から改修を進める方法
※ここではDBからデータ取得を想定
フロー
- アーキテクチャ(ディレクトリ構造)を決める
- ディレクトリを作成する
- 必要な時に必要なものを。
- DBから取得する処理を新規追加する
- 既存処理を参照している箇所を新規追加した処理の参照に改修する
- 一回で全てやる必要はない
- 下位層の修正がなくなったら、次の層のコードを改修していく
- DB → Service → Controller の様に下層から順に行う
Discussion