#1. Facade là gì?
Facade cung cấp một giao diện tĩnh (static) cho các dịch vụ bên trong Service Container. Thay vì phải làm app('log')->info(...), bạn chỉ cần gọi Log::info(...).
#2. Bản chất kiến trúc
Mọi Facade đều kế thừa từ Illuminate\Support\Facades\Facade.
getFacadeAccessor(): Trả về “key” để lấy service từ Container (ví dụ:log,cache,db).__callStatic(): Khi bạn gọi một method tĩnh không tồn tại trên class Facade, Laravel bắt sự kiện này, lấy đối tượng thực từ Container, và gọi method tương ứng lên đối tượng đó.
#3. Tại sao không nên lạm dụng?
- Khó test: Facade tạo ra “Hidden dependencies”, việc mock chúng đòi hỏi cú pháp đặc thù như
Log::shouldReceive(...). - Che giấu API: Bạn không biết class thực sự đứng sau là gì, gây khó khăn khi muốn xem source code.
#4. Quizz phỏng vấn
Câu hỏi: Làm thế nào để tạo Facade cho service của riêng bạn? Trả lời:
- Tạo class thực thi logic.
- Bind class đó vào Service Container.
- Tạo class Facade kế thừa
Illuminate\Support\Facades\Facadevà định nghĩagetFacadeAccessor().