13.4 リファクタリングのテクニック
13.5 変化に対応するためのリファクタリング
内容
リファクタリングのテクニックを紹介するよ。
リファクタリングの手法はたくさんあるが、目的は顧客が変更したいものを変更しやすくすることだ。
それを前提に、標準的なやり方を示す規律を作り、直感的に行うのではなく、皆が共通認識を持ち安全に繰り返していくことが望ましい。
13.4.1 ピンニングテスト
DIできるようになるまで(モジュールが分離できるようになるまで)、粒度の粗いテストを書いてコード変更できる準備をする。
そしてコードをリファクタリングしてテストを再実行しながら少しずつ修正する。
DIできるようになると、モックを使うことができるようになるので、モジュール単位で細かいユニットテストができるようになる。
13.4.2 依存性の注入
DIはモジュールを切り離すことができる。
そしてモックを注入すればテストができ、モジュールの正しさは担保できる。
そして切り離されていることで、そのモジュールに集中してテスト、リファクタリングができる。
13.4.3 ストラングラーパターン
システムを停止せずにコンポーネントを変更する場合は、ストラングラーパターンを使う。
古いサービスをラッピングする形で新しいサービスを作り、最終的に古いサービスがなくなるまでゆっくりと置き換えていくという考え方である。
リファクタリングに使える手法だ。
13.4.4 抽象化によるブランチ
「抽象化によるブランチ」は変更したいコードからインターフェイスを抽出して、新しい実装を書くというものだ。
そして開発中はフラグで古い機能が動くように管理しておき、新しい実装ができたらフラグで新しい機能が動くように切り替える。
学び
- DIできる状態かどうかは重要な指標。まず粒度の粗いテストでそこを目指すとよい。
- モジュールの種類別に役割を概ね決めておいて、リファクタリングの目標の像をある程度明確にする必要がある。
- DIはリファクタリングの手助けをする。
- アプリ配信の場合、どのように適用できるだろうか。
- 抽象化によるブランチというテクニックはフラグのスイッチングを前提に小さなリリースをしていくことに向いている。
- リファクタリングの目的はソフトウェアが変更可能でありつづけることで、それを忘れてはいけない。
- リファクタリングの手法は体系的で共通認識を持っていることが望ましい。
学びを活かすアイディア・行動
- ピンニングテストが必要な箇所の洗い出し
- DIすべきポイントの洗い出し
- ストラングラーパターンを使ったリファクタリングの適用の検討
- 抽象化によるブランチを適用したら効果的にリファクタリングできる箇所がないか調査
- 毎日学習した内容の展開をする