Trong một hệ thống thực tế, bạn sẽ gặp tình huống như:
- User đăng ký → gửi email
- Order tạo → trừ tồn kho → gửi notification → log
Nếu viết trực tiếp trong controller:
Code sẽ:
- Dài
- Khó maintain
- Khó mở rộng
#Event & Listener là gì?
#Event
Là một sự kiện xảy ra trong hệ thống
Ví dụ:
- UserRegistered
- OrderCreated
#Listener
Là nơi xử lý khi event xảy ra
Ví dụ:
- SendWelcomeEmail
- UpdateInventory
#Flow hoạt động
Event xảy ra → Dispatch → Listener xử lý
#Tạo Event & Listener
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail
#Ví dụ thực tế
#Dispatch event
UserRegistered::dispatch($user);
#Listener
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
// gửi email
}
}
#Tại sao nên dùng Event?
#Không dùng event
// Controller
User::create($data);
Mail::send(...);
Log::info(...);
Tight coupling
#Dùng event
UserRegistered::dispatch($user);
Decoupled
#Event + Queue = Powerful
Bạn có thể queue listener:
class SendWelcomeEmail implements ShouldQueue
Async + decoupled
#Real Case Production
#Case: Order System
Event:
- OrderCreated
Listeners:
- SendEmail
- UpdateInventory
- PushNotification
- LogActivity
Dễ mở rộng
#Khi nào nên dùng Event?
#Nên dùng khi
- Có nhiều hành động sau một sự kiện
- Muốn tách logic
- Cần mở rộng dễ dàng
#Không nên dùng khi
- Logic đơn giản
- Không cần decouple
#Anti-pattern
-
Overuse event: Mọi thứ đều event → khó debug
-
Business logic trong listener quá nhiều: Khó maintain
-
Không dùng queue cho listener nặng: Block system
#Performance Tips
- Queue listener nặng
- Log event
- Monitor hệ thống
#Mindset Senior
Junior:
Event để tách code
Senior:
Event để xây dựng hệ thống loosely coupled và scalable
#Câu hỏi thường gặp (Interview)
1. Event là gì?
Là một sự kiện xảy ra trong hệ thống
2. Listener là gì?
Là nơi xử lý khi event xảy ra
3. Khi nào nên dùng Event?
Khi cần tách logic và mở rộng hệ thống
4. Event có thể kết hợp với Queue không?
Có, để xử lý async
5. Event-driven architecture là gì?
Là kiến trúc dựa trên sự kiện để tách các thành phần hệ thống
#Kết luận
Event giúp bạn:
- Tách logic
- Dễ mở rộng
- Xây dựng hệ thống scalable
Đây là nền tảng cho microservices.