Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Посібники 04 червня 2026

Builder - поетапна побудова об'єктів

Builder збирає складний об'єкт поетапно, крок за кроком, замість того щоб передавати все одразу у конструктор.

Яку проблему вирішує

Коли об'єкт має багато опцій, конструктор розростається до десятка аргументів, половина з яких опціональні. Виклик new Report('Sales', $rows, true, false, null, ...) стає нечитабельним, а порядок аргументів - джерелом помилок.

Як вирішує

Окремий білдер тримає проміжний стан і надає fluent-методи для кожної опції. Кожен метод повертає $this, тож виклики ланцюжаться, а фінальний build() збирає готовий об'єкт. Читач бачить, що саме налаштовується, бо кожен крок має ім'я.

class Report
{
  public function __construct(
    public string $title,
    public array $rows,
    public bool $withTotals,
  ) {}
}

class ReportBuilder
{
  private string $title = 'Report';
  private array $rows = [];
  private bool $withTotals = false;

  public function title(string $title): self
  {
    $this->title = $title;
    return $this;
  }

  public function rows(array $rows): self
  {
    $this->rows = $rows;
    return $this;
  }

  public function withTotals(bool $value = true): self
  {
    $this->withTotals = $value;
    return $this;
  }

  public function build(): Report
  {
    return new Report($this->title, $this->rows, $this->withTotals);
  }
}

$report = (new ReportBuilder())
  ->title('Sales')
  ->rows([['product' => 'Book', 'sum' => 100]])
  ->withTotals()
  ->build();

Де застосовувати

  • Складні об'єкти з багатьма опціями: запити, PDF, email, об'ємні DTO.
  • Коли потрібно зручно створювати різні конфігурації одного об'єкта.
  • У самому Laravel ідея Builder всюди: Query Builder, Mail, Notification, Http - це ланцюжки методів, що поетапно конфігурують об'єкт перед виконанням.

Плюси та мінуси

  • + Прибирає довгі конструктори, код виклику стає самодокументованим.
  • + Дозволяє валідувати чи нормалізувати дані всередині build().
  • Додатковий клас на кожен об'єкт.
  • Надлишковий для об'єкта з двома-трьома полями: звичайний конструктор або іменовані аргументи PHP 8 (new Report(title: 'Sales')) зрозуміліші за окремий білдер.
31

Ця стаття - частина серії

Патерни проєктування

2 / 21

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Вакансії за темою

BINTIME Нова
2 дн. тому

Middle Full Stack Developer (PHP/React)

Middle Full Stack розробник для платформи e-commerce на мікросервісах. 70% PHP (Laravel/Symfony, REST APIs, MySQL/PostgreSQL, Redis), 30% React та Blade шаблони. Потрібно 3+ років досвіду з PHP 8.x, Docker, Git, готовність працювати з AI-інструментами (Claude Code, Cursor, Copilot). Можливість розвитку в AI-інженерингу на production-фічах.

SushiBang Нова
2 дн. тому

Middle Laravel / Filament Developer

Розробка та підтримка кастомної CRM-системи для доставки з використанням Laravel 12, Filament 5 та Livewire. Спеціаліст займатиметься проектуванням бази даних, розробкою модулів прийому/обробки замовлень, інтеграцією через REST API та оптимізацією. Вимагається глибоке розуміння Laravel, Filament та PostgreSQL, досвід з Livewire та SQL-оптимізацією. Важливі автономність і відповідальність.

PulsePaw
3 дн. тому

Junior Strong/Middle PHP developer

Розробник PHP/Laravel для фінтех-проекту на мікросервісній архітектурі. Відповідатиме за підтримку та покращення кодової бази, оптимізацію продуктивності, роботу з MySQL, Redis, черг. Потрібні 2+ роки комерційної розробки, 1+ років PHP (Laravel), розуміння OOP та SOLID, мінімальні знання HTML/CSS/JS.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

27,884 v2.4.8 12 15

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,775 15.33.2 8

Відео за темою