第11章 APIのリファクタリング

問い合わせと更新の分離

値を返す関数は、観察可能な副作用をもってはならない
→ コマンドとクエリの分離原則

必ずしもこの原則を取り入れる必要はないが、多くの場合従うようにするべき

手順

パラメーターによる関数の統合

リテラル値が異なるだけの、非常に似たロジックを持つ二つの関数があるなら、異なる値を渡すためのパラメーターをもった一つの関数を用いることで重複を排除できる

手順

フラグパラメーターの削除

引数にフラグを使うのではなく、別の関数を使うべき

手順

オブジェクトそのものの受け渡し

ひとつのレコードから、数個の値を取り出して、関数に渡している場合、レコード自体を渡して関数本体で取り出すように変更する

手順

問い合わせによるパラメーターの置き換え

パラメーターに渡すまでもなく容易に求められる値を渡している場合、それは重複になるのでこのリファクタリングを行う

手順

パラメーターによる問い合わせの置き換え

関数のスコープ内で好ましくない参照をしている時に行う
関数をある要素から非依存にして、パラメーター化する

手順

setterの削除

オブジェクトを生成した後でフィールドを変更したくないなら、setterは不要

不要なsetterを用意してしまう典型的なケースは二つ

手順

ファクトリ関数によるコンストラクタの置き換え

コンストラクタには通常の関数にない、制約がある
ファクトリ関数を使うことで、コンストラクトの制約から解放される

手順

コマンドによる関数の置き換え

関数自身をオブジェクトとして、カプセル化することが有用な場合がある
→ コマンドオブジェクト もしくは 単にコマンド

手順

関数によるコマンドの置き換え

コマンドオブジェクトは複雑な計算を扱うための強力なメカニズムを提供してくれる
しかし、コマンドオブジェクトの関数がそれほど複雑でもないなら、コマンドオブジェクトにしてもあまり意味がない

手順

## 感想

問い合わせと更新の分離は結構Rubyだとやらないことが多め?
言語仕様からして必ず戻り値があるから相性が悪いとか