Builder (Budowniczy) to wzorzec kreacyjny, który ułatwia konstruowanie skomplikowanych obiektów etapami. Zamiast konstruktora z wieloma parametrami używa się osobnego obiektu z metodami ustawiającymi kolejne cechy, a na końcu metody zwracającej gotowy wynik.
Przykład w PHP
$zapytanie = (new ZapytanieBuilder())
->tabela('artykuly')
->gdzie('status', 'opublikowany')
->sortuj('data', 'DESC')
->limit(10)
->zbuduj();
Łańcuch wywołań (fluent interface) czyni kod czytelnym, a kolejność ustawiania nie musi być z góry ustalona.
Po co Builder?
Rozwiązuje problem „teleskopowego konstruktora”, czyli klas z długą listą parametrów, z których wiele jest opcjonalnych. Pozwala też zbudować obiekt niezmienny, który po utworzeniu nie zmienia stanu, oraz zweryfikować jego spójność w momencie budowy.
Gdzie go spotkasz?
W budowniczych zapytań SQL w ORM-ach, konstruktorach żądań HTTP, generatorach formularzy i bibliotekach do tworzenia dokumentów. Dla obiektów z kilkoma polami wystarczy zwykły konstruktor.
Builder a inne wzorce kreacyjne
Fabryka decyduje, jaki obiekt utworzyć, a Builder, jak go skonstruować krok po kroku. Wzorce można łączyć: fabryka może zwrócić gotowego buildera. W nowoczesnych językach część potrzeb zaspokajają parametry nazwane i wartości domyślne, więc Builder bywa potrzebny dopiero przy naprawdę złożonym tworzeniu obiektów.
Ma to bezpośredni związek z praktykami, na których opiera się pisanie czytelnego i zrozumiałego kodu.
Zobacz w praktyce
Clean Code - jak pisać czytelny i zrozumiały kod
Jak zmierzyć i spłacać dług technologiczny w projekcie
Jak zabezpieczyć aplikację przed SQL Injection Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe