「メンバー」プレフィックスは、実装の詳細の一種です。リファクタリングの可能性を考える際に、問題の領域から技術的な解決の領域に注意をそらすことで、あなたの心を偏らせます。–私
さらに説明できますか?あなたが接頭辞を使用しない理由について私が見た唯一の理由であり、私はそれを理解していません...私がそうすべきではない理由とは異なります)–ベティ・クロッカー
私のポイントは、@ CandiedOrangeと@Ewanの答えを拡張することです。
プレフィックスはリファクタリングを難しくします
コードが進化するにつれて、変数とメソッドのスコープが変わる可能性があります。例えば。プライベートメソッドを作成し、後で他の(新しい)クラスでも使用できるようにする必要があることがわかります。メソッドのパラメーターとローカル変数についても同様のことが起こります。
税計算機を作成するとします。変数のリース可視性スコープの原則によれば、パラメーターとして税率と基本値の両方をとる方法で開始します:(
例はJava風に見えるかもしれません...)
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
}
次に、逆の操作を実装する必要があり、TDDに従って、最小限の労力でそれを実行します。
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxRateInpercent, double p_TaxedValue){
return p_TaxedValue/((100+p_TaxRateInpercent)/100);
}
}
次のTDDでは、両方のメソッドのパラメーターリストを削減するために、コードをリファクタリングしてクリーンにすることを求めています。
(はい、最初に2倍の計算を抽出しますが、ポイントを教えてください...)
明らかな解決策は、コンストラクターパラメーターとして渡すことにより、税率をメンバー変数に変更することです。
class TaxCalculator{
double m_TaxRateInpercent;
TaxCalculator(double p_TaxRateInpercent){
m_TaxRateInpercent = p_TaxRateInpercent;
}
double Calculate(double p_BaseValue){
return (100+m_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxedValue){
return p_TaxedValue/((100+m_TaxRateInpercent)/100);
}
}
ご覧のとおり、既存のメソッドのすべての行を変更する必要がありました(以前p_TaxRateInpercent
は正確でした。
問題は、クラス全体で名前の変更を行うIDEのサポートがないことです。コンストラクタまたは誤ってstringを含む部分を変更する検索/置換の唯一のヘルプp_TaxRateInpercent
。
あなたのIDEは...未定義の変数名のリファクタリングに変更を提供するかもしれませんが、これはメソッドのスコープに制限されるかもしれません
プレフィックスがなければ、メソッドシグネチャのみが変更されます。名前の変更はまったく必要ありませんでした。
変更時にSCM履歴が乱雑になる
また、ロジックは変更されていませんが、SCMはプレフィックスの変更をロジックの変更として記録します!SCMの歴史には、この技術的な変更が散らばっていて、何が重要かを隠し、他の(実際のロジック)変更との競合のリスクを高めています。
this
キーワードがありませんか?this
などを使用してメンバーを参照できませんでしたthis.count
か?