昨日書いた「強引なコード」でよくやってしまうのが、「不要な条件分岐」と「遠いオブジェクトへのメッセージ送信」がある。
不要な条件分岐
たとえば測定モードごとに初期化の方法が違う場合などに、呼び出し元で測定モードを判別して初期化法を選択したりする。
if (Measure->Mode == MAPPING_MODE) { Measure->ClearMap(); //Mapping mode のときだけMapをクリア } Measure->Start();
問題点
不適切なクラス設計の匂いがする。
美しくない。
解決法
できれば多態に置き換えたい。
遠いオブジェクトへのメッセージ送信
当初想定していなかったオブジェクトへメッセージを送る必要が生じたとき、ポインタを何段も手繰る羽目になる。システムが大きくなるにつれてこ頻度が上がる。
#include "System.h" #include "Apparatus.h" #include "VoltageController.h" #include "Bias.h" System->Apparatus->VoltageController->Bias->SetSampleVoltage(dVolt);
問題点
本来不要なヘッダをインクルードするため、依存性が高くなる。
美しくない。
解決法
オブジェクト同士の関連の構造を見直す。
メソッドが適切なクラスに振り分けられているかどうかを見直す。