Tatsuya Oiwa @tatsuyaoiw

「リファクタリング」読んだ

Martin Fowlerの「リファクタリング」を読んだのでいくつか良いと思った箇所を引用。

リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善していく作業を指します。

リファクタリングによって、仕事の作業配分が変わってきます。設計の作業が、最初の工程で集中的に発生するのではなく、全行程を通じて継続して行われるようになります。

リファクタリングを行う時には、何か別の目的が前提になっているべきです。機能を追加したり、バグを修正したりという目的を持ってリファクタリングをしましょう。はじめから完全なリファクタリングをする必要はありません。本来の仕事を達成するのに必要な分だけリファクタリングすればいいのです。

機能追加を行うときには、既存のコードを変更してはいけません。単純に機能を拡張することに専念します。(中略)一方、リファクタリングをしているときには、機能追加は行わないようにします。コードの再構築をするのみです。

柔軟性を求めた解決策は複雑になりがちです。その結果できたソフトウェアは予想していた変更に簡単に対処できるものの、通常は保守しにくくなります。

オブジェクト指向の世界で最も重要なのはインターフェースです。優れたオブジェクト指向のソフトウェアを開発するには、理解が容易で、使いやすいインターフェースを提供することが秘訣となります。

感想

  • 名前付け重要。複雑な処理にわかりやすい名前をつけることもリファクタリングの重要な手法のひとつである。
  • Extract Method/Class ⇄ Inline Method/Class, Inheritance ⇄ Delegationのように、リファクタリングは一方向ではなく常に両方向で考える。必ずしも小さなメソッド、小さなクラスに切り出すことが正しいわけではなく、役割が明確でないメソッドやクラスはInlineでまとめた方が可読性が上がる。
  • リファクタリングはそれ自体が独立した技術というわけではなく、オブジェクト指向やImmutability, LayeringによるDomainの分離など様々なソフトウェア設計ののベストプラクティスを安全に適用していくための手法である。