#Nguyên tắc cốt lõi
👉 Một class chỉ nên có 1 lý do để thay đổi
👉 Rule:
- 1 class = 1 responsibility
#Bad Example (God Class)
class User {
public function save() {}
public function sendEmail() {}
public function validate() {}
}
#Vấn đề
- 1 class làm quá nhiều việc
- Khó test
- Khó maintain
- Dễ bug dây chuyền
#Good Example (Separation)
👉 Tách responsibility:
- User → domain
- Repository → DB
- Validator → validate
- Notifier → email
- Service → orchestration
#Giải thích sâu (Senior mindset)
#1. “Reason to change” là gì?
👉 Là nguyên nhân làm class thay đổi
Ví dụ:
- Thay đổi DB → Repository thay đổi
- Thay đổi email template → Notifier thay đổi
👉 Nếu 1 class bị ảnh hưởng bởi nhiều lý do → vi phạm SRP
#2. SRP không phải “1 method”
❌ Sai:
- 1 class chỉ có 1 method
✅ Đúng:
- 1 class có thể có nhiều method
- Nhưng cùng 1 responsibility
#3. God Class là gì?
👉 Class làm tất cả mọi thứ
Dấu hiệu:
- 1000+ lines
- 10+ dependencies
#4. SRP trong Laravel
❌ Controller:
- validate
- query DB
- gửi mail
✅ Tách:
- FormRequest
- Service
- Job/Event
#5. SRP + Clean Architecture
👉 Domain layer phải clean
#Tips & Tricks (Senior level)
#1. Nếu class có nhiều “and” → tách
UserServiceAndMailer ❌
#2. Giới hạn dependency
4-5 dependencies = smell
#3. Tách theo change axis
#4. Controller phải thin
#5. Không over-split
👉 Tránh tạo quá nhiều class nhỏ vô nghĩa
#Interview Questions
1. SRP là gì?
Summary:
- 1 class = 1 responsibility
Deep: Chỉ có 1 lý do để thay đổi
2. Làm sao biết class vi phạm SRP?
Summary:
- Làm nhiều việc
Deep: Có nhiều reason to change
3. SRP có phải 1 method/class không?
Summary:
- Không
Deep: Nhiều method nhưng cùng responsibility
4. SRP giúp gì cho testing?
Summary:
- Dễ test
Deep: Mock dễ, isolate logic
5. SRP liên quan Clean Architecture không?
Summary:
- Có
Deep: Giúp tách layer rõ ràng
#Kết luận
👉 SRP là nền tảng của:
- Clean code
- Clean architecture
- Maintainability
👉 Nếu vi phạm SRP:
- Code sẽ trở thành “God object”