SRP quy định mỗi class/module chỉ nên có một lý do để thay đổi, tức là chỉ chịu trách nhiệm cho một chức năng duy nhất.
Ví dụ trong TypeScript:
typescript
// Vi phạm SRP — 1 class làm 3 việc
class UserService {
handleLogin() { /* ... */ }
log(msg: string) { /* ... */ }
sendEmail() { /* ... */ }
}
// Đúng SRP — tách riêng
class UserService { handleLogin() { /* ... */ } }
class Logger { log(msg: string) { /* ... */ } }
class EmailService { sendEmail() { /* ... */ } }Lợi ích: code dễ test, dễ maintain.
Dấu hiệu vi phạm: class có nhiều method không liên quan nhau hoặc file dài hàng nghìn dòng.