Index: [Article Count Order] [Thread]

Date:  Sat, 2 Dec 2000 12:03:09 +0900
From:  "Shinichi I. OMURA" <omura@....jp>
Subject:  [XP-jp:01225] Re: 単純な設計
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <20001202120256omura@....jp>
In-Reply-To:  Your message of "Thu, 30 Nov 2000 10:42:24 +0900"             <20001130104209tsujit@....jp>
References:  <20001130104209tsujit@....jp>
Posted:  Sat, 02 Dec 2000 12:02:56 +0900
X-Mail-Count: 01225

おおむらです。

ちょっと風邪をひいて、機能していませんでした。


tsujit@....jp wrote: 
in: "[XP-jp:01219] Re: 単純な設計"
>辻(忠)です。

  略

>>一般化するほうが問題が簡単になる場合もあると
>どこかで読んだしそう思うのですが、
>>XPでははっきりとそれを禁止していますよね。
>
>私としてはこの正解は
>「3回目以上同じ形式の関数を作る必要が出てきたら、
>一般化していく。」
>だと思います。
>これは確か「リファクタリング」に載っていた基準です。
>いっそ
>「3回目からは一般化する。
>すべきであり、しなければいけない。」
>くらいの捉え方でもいいと思います。

なるほど。
リファクタリングのことはあんまり考えていませんでした。

一般化すると見通しがよくなるはずだから、元のコードは
きっと読みにくく分かり難いものになっているはずなので
そういうスメルがぷんぷんとしているのでしょうね。

今、手もとに本がないのでうろおぼえですが、
「リファクタリング」には、さりげなく、リファクタリングとは
機能を保ちながら、設計をよいものに変えていくことだ、
というようなことが書いてありました。

一般化をすると、機能が増えて、変ってしまうので、
リファクタリングとは言えないのかなという気もします。
でも、似ているコードを変数を導入してひとつにまとめると、
否応なく一般化されてしまいますしね。

やってることはUnitTestで振る舞いを変えないようにして
設計を変更することだから、テストされていない機能に
ついては、変化してもかまわないと考えるのでしょう。


ただ、、表をひくアルゴリズムから積を計算するアルゴリズム
に変えるのは、リファクタリングというより、作り直しなのかな
と思います。

重要なのは、設計をみなおすことで、リファクタリングがその
契機であることの価値は変りませんが。


>大事なのは
>「リファクタリングするタイミングでは設計について悩む」
>って事だと思います。
>コーディングを進める時点では
>簡単&即興(ハック&スラッシュ!)の方法を。
>リファクタリングでは
>読みやすさ・設計のありかたを考えた方法を。
>被る帽子で思考パターンも変えることだと思います。

確かに、そうですね。
現実のいろんな側面について、他の帽子をかぶっていては
気づかないことに、帽子をかぶり直すことで心を切り替えて、
気づいていくというのは大切ですね。

XPでは、手を変え品を変え、そういう「気づき」ができるようにしようとしている
ようにも思います。気づくってことは、フィードバックするっていうことですしね。


しかし、本当に、そういう帽子を作って使ったら、意外なほど効果があるかもしれない :-)