© 2026 Laravel

Refactor: Thay thế If-Else bằng Strategy Pattern

1 phút đọc
#refactoring #design-patterns #clean-code

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Bài toán

Bạn có một hàm xử lý giảm giá: if ($type == 'vip') ... elseif ($type == 'new') .... Khi thêm loại giảm giá mới, bạn lại phải sửa hàm này.

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

Tạo một Interface DiscountStrategy, sau đó tạo các class cụ thể: VipDiscount, NewUserDiscount. Trong code, bạn chỉ cần gọi: $strategy->apply($price).

#3. Code mẫu

// Thay vì if-else, dùng container để resolve
$strategy = app("DiscountStrategy.{$type}");
return $strategy->apply($price);

#4. Câu hỏi nhanh

Q: Khi nào KHÔNG nên dùng Strategy? A: Nếu logic chỉ có 1-2 if đơn giản, việc tạo ra 3-4 class Strategy là Over-engineering. Chỉ refactor khi logic nghiệp vụ phức tạp và cần thêm mới thường xuyên.

Bài viết liên quan