リファクタリング前提の設計

方々でリファクタリングに関しての話題が盛り上がっている中でひがさんの日記の一文より

最初からリファクタリングを前提に設計するっておかしくないかなぁ。

この"リファクタリング前提の設計"というのは単純に考えても以下の二つのケースがあるのではと思いました。

どうせ誰かがリファクタするんだから最初の設計は適当で良いよね、とリファクタのダークサイドに染まる

必要な設計は行うけれどいつ何時リファクタの必要が出てくるか解らないからね、とリファクタのフォースを信じる

恐らくひがさんは前者の事をおかしいと指摘しているのだろうとは思います。がしかし後者であればリファクタリング前提の設計はけっして悪くはないと思うのです。むしろ進歩的な設計には不可欠ではないかと。

追記:
書いていてなにかひっかかるのでリファクタリングの要件を考え直してみた。

プログラムの外観を変えずにソースコードの中身を変えていくこと

・設計を改善する
・コードの可読性が上がる?
・コードの生産性が上がる?
・コードの保守性が上がる?
・コードの柔軟性が上がる?

設計を改善する...プログラムの外観を変えずに設計を改善する...うーん、リファクタリングを前提したとしてもやはり最初の設計が重要なことには変わりは無いような気がしてきました。インパクトの大きい変更って所詮リファクタリングでは収まらないんですよね。