前提
Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)
当記事は上記のうち、Collecting Inputsに関する話です。
詳細
メソッドに対する入力には以下のようなものがあります。
・引数
・定数
・同一クラスの他メソッド
・インスタンス変数
・間接的入出力(Indirect Input)
間接的入出力(Indirect Input)について
デメテルの法則に反している場合や環境情報など、self以外から参照される情報を指しています。
デメテルの法則に反すると、対象入力の内部構造の影響を受けてしまいます。
環境情報については、プログラム外の情報の影響を受けます。
双方とも、バグの要因になりやすいです。
デメテルの法則に反する箇所に関しては、selfから参照できるようにリファクタリングをする必要があります。
環境情報などは、テスト時にモック等する必要があるでしょう。