DSL / Construction Builder


DSL

コンストラクションビルダ

一言要約

複数のフィールドを持つ不変オブジェクトを段階的に作り上げる必要がある場合に、ビルダを用意して中途段階のデータを保管する。

要約

仕組み

  • 不変オブジェクトのフィールド値を徐々にビルダ内部に格納し、最終的には対象不変オブジェクトのコンストラクタを呼び出してオブジェクトを生成して返す。
  • 一度生成したらそれ以上生成できなくしたり、情報が不足している場合は生成メソッドを呼べないようにするなど、応用可能
  • ビルダを階層的に構成することで、階層的な不変オブジェクトをうまく生成できる。

使いどころ

  • 複数の不変フィールドから成るオブジェクトを作る必要があるが、フィールド値は段階的に収集する必要がある場合。
  • このテクニックは、生成対象に不変フィールドがある場合に限られることに注意。

ファウラーへのフィードバック

  • DSL的にはいつ使うのか、という話が欲しいです。
  • サンプルはやく!
  • 名前がしっくりこない ConstructionとBuilderってかぶってない?

担当者のつぶやき

短くて助かったものの、最初は盛大に誤訳しました。

みんなの突っ込み