おおむらです。
ちょっと風邪をひいて、機能していませんでした。
tsujit@....jp wrote:
in: "[XP-jp:01219] Re: 単純な設計"
>辻(忠)です。
略
>>一般化するほうが問題が簡単になる場合もあると
>どこかで読んだしそう思うのですが、
>>XPでははっきりとそれを禁止していますよね。
>
>私としてはこの正解は
>「3回目以上同じ形式の関数を作る必要が出てきたら、
>一般化していく。」
>だと思います。
>これは確か「リファクタリング」に載っていた基準です。
>いっそ
>「3回目からは一般化する。
>すべきであり、しなければいけない。」
>くらいの捉え方でもいいと思います。
なるほど。
リファクタリングのことはあんまり考えていませんでした。
一般化すると見通しがよくなるはずだから、元のコードは
きっと読みにくく分かり難いものになっているはずなので
そういうスメルがぷんぷんとしているのでしょうね。
今、手もとに本がないのでうろおぼえですが、
「リファクタリング」には、さりげなく、リファクタリングとは
機能を保ちながら、設計をよいものに変えていくことだ、
というようなことが書いてありました。
一般化をすると、機能が増えて、変ってしまうので、
リファクタリングとは言えないのかなという気もします。
でも、似ているコードを変数を導入してひとつにまとめると、
否応なく一般化されてしまいますしね。
やってることはUnitTestで振る舞いを変えないようにして
設計を変更することだから、テストされていない機能に
ついては、変化してもかまわないと考えるのでしょう。
ただ、、表をひくアルゴリズムから積を計算するアルゴリズム
に変えるのは、リファクタリングというより、作り直しなのかな
と思います。
重要なのは、設計をみなおすことで、リファクタリングがその
契機であることの価値は変りませんが。
>大事なのは
>「リファクタリングするタイミングでは設計について悩む」
>って事だと思います。
>コーディングを進める時点では
>簡単&即興(ハック&スラッシュ!)の方法を。
>リファクタリングでは
>読みやすさ・設計のありかたを考えた方法を。
>被る帽子で思考パターンも変えることだと思います。
確かに、そうですね。
現実のいろんな側面について、他の帽子をかぶっていては
気づかないことに、帽子をかぶり直すことで心を切り替えて、
気づいていくというのは大切ですね。
XPでは、手を変え品を変え、そういう「気づき」ができるようにしようとしている
ようにも思います。気づくってことは、フィードバックするっていうことですしね。
しかし、本当に、そういう帽子を作って使ったら、意外なほど効果があるかもしれない :-)