Builder
Builderは、複雑な値の構築手順を、その値の表現から分離する手法です。単なるメソッドチェーンではなく、複数の構築手順や表現を同じ生成過程で扱えることに価値があります。
採用する場面
- 構築が複数段階に分かれ、途中の入力を蓄積する必要がある
- 必須項目の順序や組み合わせを、APIとして案内したい
- 同じ構築過程から異なる表現を生成する
- テストデータなど、多数の組み合わせを既定値から組み立てる
名前付きプロパティのオブジェクトと一度の実行時検証で十分なら、Builderを作りません。引数の個数だけを導入基準にせず、構築過程そのものに独立した意味があるかを確認します。
実装方針
build()など、完成と検証が行われる地点を明確にする- 必須項目が欠けたときの失敗を、型または具体的な検証エラーで示す
- Builderを再利用できるか、一度だけ使うか、
build()後に状態が残るかを決める - mutableなBuilderを共有しない。並行利用や再利用が必要なら不変な設計を検討する
- 型で構築順を制限しても、外部入力の実行時検証は省略しない
Fluent APIは読みやすい呼び出し形式、Builderは生成過程を分離する設計手法です。BuilderをFluentにすることはできますが、同じものではありません。