Builderパターン - TypeScriptでのステップバイステップオブジェクト構築
複雑なオブジェクトをステップバイステップで構築するBuilderパターンをマスターしましょう。TypeScriptでのFluent APIデザイン、メソッドチェーン、Directorパターンを学びます。
詳細な説明
Builderパターン
Builderパターンは、複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。多くのオプションパラメータを持つオブジェクトに特に有用です。
テレスコーピングコンストラクタ問題
Builderなしでは、多くのパラメータを持つコンストラクタは読みにくくなります:
// 読みにくい: 各引数が何を意味するか不明
new QueryBuilder("users", true, false, 100, 0, "name", "asc");
Builderを使用すると、各パラメータは名前付きメソッドで設定されます:
new QueryBuilder("users")
.select(["name", "email"])
.where("active", true)
.orderBy("name", "asc")
.limit(100)
.build();
Fluent APIデザイン
優れたビルダーの鍵はメソッドチェーンです: 各セッターがthisを返し、呼び出しをチェーンできます。最終的なbuild()メソッドは蓄積された状態を検証し、不変の製品を生成します。
Director(オプション)
Directorクラスは、プリセットの構築シーケンスを定義できます。これにより、よく使用される構成を再利用可能な形でカプセル化できます。
検証
適切に設計されたビルダーはbuild()メソッドで検証を行い、必須フィールドが欠けている場合や設定が内部的に矛盾している場合に説明的なエラーをスローします。
実世界の例
Builderは現代のライブラリで広く使用されています: Express.jsのリクエスト/レスポンス、Prismaクエリビルダー、Knex.js、Zodスキーマ定義、HTTPクライアント設定はすべてBuilder風のAPIを使用しています。
ユースケース
Builderは、多くのオプションヘッダーとパラメータを持つHTTPリクエストの構築、動的なフィルターとジョインを持つデータベースクエリの構築、数十のオプション設定を持つ設定オブジェクトの作成、多くのオプションpropsを持つ複雑なUIコンポーネントの組み立てに最適です。