Các framework PHP (Laravel, Symfony) được xây trên các design pattern kinh điển — những lời giải tái sử dụng cho các vấn đề thiết kế thường gặp. Nhận ra chúng giúp bạn hiểu cách framework hoạt động và tự viết code có cấu trúc tốt hơn.
MVC (Model-View-Controller) — nền tảng kiến trúc
Model → dữ liệu + logic nghiệp vụ (ví dụ các model Eloquent)
View → phần hiển thị (template: Blade, Twig)
Controller → xử lý request, điều phối model & view
→ Mẫu cấu trúc của gần như mọi framework web PHP.
Dependency Injection / IoC Container
// framework dùng một container để phân giải & tiêm phụ thuộc (tách rời, khả năng test)
$service = $container->get(UserService::class); // phụ thuộc được tự động kết nối
Repository pattern — trừu tượng hóa truy cập dữ liệu
interface UserRepository {
public function find(int $id): ?User;
}
class EloquentUserRepository implements UserRepository { /* impl riêng cho DB */ }
// các service phụ thuộc vào INTERFACE → thay đổi nguồn dữ liệu, mock trong test
Mẫu Repository trừu tượng hóa truy cập dữ liệu phía sau một interface — tách logic nghiệp vụ khỏi cơ sở dữ liệu và hỗ trợ test.
Factory — đóng gói việc tạo object
class PaymentFactory {
public static function create(string $type): PaymentGateway {
return match($type) {
'stripe' => new StripeGateway(),
'paypal' => new PayPalGateway(),
};
}
}
Các mẫu phổ biến khác trong framework PHP
Singleton → một instance dùng chung (thường qua DI container, ví dụ config, kết nối DB)
Observer → hệ thống event/listener (event của Laravel, model observer)
Strategy → các thuật toán hoán đổi được (ví dụ các driver cache/auth khác nhau)
Decorator → bọc để thêm hành vi (kiểu middleware bọc request/response)
Facade → giao diện static đơn giản tới các hệ thống con phức tạp (Facade của Laravel:
Cache::get(), DB::table() — proxy tới service được container phân giải)
Adapter → giao diện thống nhất trên các triển khai khác nhau (ví dụ driver filesystem)
Active Record → model bọc dòng DB với các method query/save (Eloquent)
Laravel đặc biệt phô diễn những thứ này: Facade (proxy static tới service), Active Record (model Eloquent), Observer (event/model observer), Strategy (driver hoán đổi cho cache, queue, auth).
Tại sao điều này quan trọng
Design pattern là kiến thức quan trọng cho lập trình viên PHP vì các framework lớn (Laravel, Symfony) được xây hoàn toàn trên chúng — nên hiểu pattern là thiết yếu cả để nắm bắt cách các framework này hoạt động lẫn để tự viết code có cấu trúc tốt.
Nhận ra MVC (nền tảng kiến trúc của gần như mọi framework web PHP), Dependency Injection / IoC container (cách framework kết nối phụ thuộc để tách rời và dễ test), mẫu Repository (trừu tượng hóa truy cập dữ liệu để có persistence dễ test, thay thế được), và các mẫu đặc thù của framework như Facade của Laravel (proxy static tới service), Active Record (model Eloquent), và Observer (event) làm sáng tỏ "phép màu" của các framework này và cho phép bạn dùng và mở rộng chúng hiệu quả.
Ngoài việc hiểu framework, biết các mẫu phổ biến cho bạn một từ vựng chung cho các thảo luận thiết kế, các lời giải đã được chứng minh cho các vấn đề lặp lại, và khả năng kiến trúc code dễ bảo trì, linh hoạt.
Vì phát triển PHP chuyên nghiệp gần như luôn diễn ra trong các framework nặng về pattern, và vì thiết kế ứng dụng tốt dựa vào việc dùng pattern phù hợp, hiểu các design pattern phổ biến — chúng giải quyết gì và xuất hiện ở đâu trong hệ sinh thái PHP — là kiến thức cấp senior giá trị phân biệt các lập trình viên hiểu sâu công cụ của mình và có thể xây ứng dụng được kiến trúc tốt với những người dùng framework hời hợt. (Lưu ý, như mọi khi: pattern là công cụ cho vấn đề thực, không phải mục tiêu — áp dụng chúng nơi không phù hợp thêm sự phức tạp không cần thiết.)
