© 2026 Laravel

Builder Pattern: Xây dựng đối tượng phức tạp từng bước

2 phút đọc
#design-patterns #php #clean-code #creational

#1. Vấn đề

Khi khởi tạo một đối tượng (vd: ReportGenerator) với hàng chục tham số, code trở nên cực kỳ khó đọc và dễ sai sót. Nếu có nhiều tham số tùy chọn, bạn phải truyền null liên tục.

#2. Định nghĩa

Builder Pattern tách việc tạo đối tượng phức tạp khỏi lớp của nó. Cho phép xây dựng object qua nhiều bước gọi phương thức.

#3. Cách giải quyết

class ReportBuilder {
    protected $report;
    public function __construct() { $this->report = new Report(); }
    public function withTitle($title) { $this->report->title = $title; return $this; }
    public function withFormat($format) { $this->report->format = $format; return $this; }
    public function build() { return $this->report; }
}

// Sử dụng
$report = (new ReportBuilder())->withTitle('Q1')->withFormat('pdf')->build();

#4. Ứng dụng & Mẹo

  • Ứng dụng: Xây dựng câu query (Query Builder của Laravel), tạo PDF/Email phức tạp.
  • Mẹo: Dùng return $this trong các method để cho phép Fluent Interface (gọi liên tiếp).

#5. Phỏng vấn

  • Q: Builder khác Factory? Factory tạo object 1 bước, Builder tạo qua nhiều bước.
  • Q: Khi nào KHÔNG dùng? Khi object quá đơn giản.

#6. Kết luận

Builder Pattern giúp code của bạn có tính mô tả cao (self-documenting) và tách biệt logic khởi tạo phức tạp.

Bài viết liên quan

Design Pattern là gì?

Tìm hiểu Design Pattern là gì, cách hoạt động, sự khác biệt với thuật toán và phân loại 3 nhóm Design Pattern phổ biến trong lập trình.

4 phút đọc