パラメータのオブジェクト化
クラス全体が不変だったり、不変な属性が交っている場合(DDDのエンティティとか)
例えばこんな感じ
このままだと変更に弱いので、ビルダークラスと分ける。
メリット
・仕様変更があってもPersonクラスのコンストラクタを増やす必要がない。
・チェック処理をBuildメソッドで書けるのでコンストラクタがごちゃごちゃしない。
・インスタンス生成のタイミングが制御しやすい。
・初期化処理にバリエーションがあるならビルダーをラップしたファクトリを作れば良い。
デメリット?
・単純に記述量が増える。
・クラスが増える。
仕様変更を重ねてコンストラクタがオーバーロード祭りになるくらいなら
コンストラクタのパラメータを専用オブジェクトにしときたい。