レガシーコードをリファクタリングしてみた
発端
先日、TTDBC のコミュニティ内でレガシーコードをリファクタリングするライブコーディングに参加させていただきました。 実際に自分でも手を動かしてみようと思い、C# のサンプルでリファクタリングを実践してみました。
サンプルコード
今回リファクタリングのサンプルで使用したリポジトリはこちらです。 様々なプログラミング言語で用意されているので、お好きなものから選べます。
ちなみに、リポジトリ名の Kata
は空手などの 型
という意味だそうです。
実際にリファクタリングしてみたコード
元々用意されていたテストフレームワークが NUnit だったので、別途 xUnit のテストプロジェクトを用意してそちらにテストコードを書きました。 (その際、テストプロジェクトフォルダをルートフォルダに作ってしまった…)
所感
ライブコーディングでは一気にテストを書くのではなく、ある程度テストコードを書いたらリファクタリングを進めて、慎重にリファクタリングをしたい部分があれば、その範囲内を対象としてテストコードを追加で記述するといった感じでした。
流暢にテスト&リファクタリングを進めてて感動しました。
私もそれに倣って簡単なテストコードを書いてグリーンにしてから、まずは IDE のリファクタリング機能を全面に信じて、IDE のリファクタリング機能のみを利用してリファクタリングを進めました。
もうこれ以上は IDE によるリファクタリングができない、つまり本番コードに手を加える必要が出てきた際に、テストコードを書きました。私はここで一気に思いつくテストコードを書きました。
本番コードに手を加えるリファクタリングは、歩幅を広げすぎない程度に少しずつやった方が良いとは思っていたのですが、それがなかなか難しくて一気に本番コードに手を加えてしまいました。反省…。 (Factory パターンを適用する形で一気にコードを書き換えた)
I/F を定義して、それを実装したクラスを作成して、いくつか同じ I/F を実装したクラスが登場してきたら Factory メソッド作りますかとなって…という流れが理想なのかなと。