リファクタリングワークブック その2
今日は、巨大なクラスからクラスインターフェイスの不一致あたりまで読み進めました。
巨大なクラスはSimpleSVNClientで苦しめられたJTableクラス。データは別クラスが管理しているのにも関わらず、このメソッド量。多すぎます。
デザイン系を別クラスにした方が良いような気がしました。
多すぎる引数は、RectangleやRangeで置き換えられるものばかり。
ただ、メッセージボックス出力メソッドとかは、呼び出しが面倒になるので、あまり引数をオブジェクトにするのはどうかと感じましたね。
次は、名前。 これは大事です。
ハンガリアン記法は古いと。C++使ってたころは使ってたけど、最近は全然使ってませんね。 最近はローカル、フィールド関係なく命名しちゃってます。 これもIDE依存だとバッチリ分かるので、名前を考えなくても問題ないですね。
一時期、フィールドは_を付けるのをやってましたが、
あれはあれで利点はあります。
例えば、フィールドの一覧が見たいときは、_を打った後Ctrl+Space。これで一覧が見れるし、
引数とフィールドの名前がかぶることがないので、thisを使うことが少なくなります。
このへんは、コーディング規約に従いましょう。
情報を伝達しない名前は当然ですね。
swapの時の一時変数は大体tempにしちゃいますが。
本当は何がいいんだろ?
一貫性のない名前はたまにやります。
一番間違うのがstart-stop begin-endの組合せ。
start-endにしてしまいがち。
あとは、clear()やerase()は全て削除のイメージがありますね。
実行されないコードは書かないので、問題なし。
必要なことしか書きません。
疑わしき一般化もベタで作っていくなかで、必要になったらリファクタリングするようにしているので、殆どやらないですね。
事前に分かってる場合は、やりますけど。事前に分かってる程度だとやりすぎるってこともあります。
マジックナンバーはあんまり意識してませんが、一応外だしするようにしてます。
重複したコードは、疑わしき一般化とのトレードオフって感じですね。 やりすぎもダメだし、やらなすぎもダメってことですね。
難しい。
今日やったところは、問題が抽象的でちょっと意味がわかりにくかったですね。
問題が抽象的なのもあるけど、翻訳がちょっと。なところもありで。