昨日書いた「強引なコード」でよくやってしまうのが、「不要な条件分岐」と「遠いオブジェクトへのメッセージ送信」がある。

不要な条件分岐

たとえば測定モードごとに初期化の方法が違う場合などに、呼び出し元で測定モードを判別して初期化法を選択したりする。

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);
問題点

本来不要なヘッダをインクルードするため、依存性が高くなる。
美しくない。

解決法

オブジェクト同士の関連の構造を見直す。
メソッドが適切なクラスに振り分けられているかどうかを見直す。