SOLID Principal
September 8, 2025
S.O.L.I.D là tập hợp 5 nguyên tắc thiết kế hướng đối tượng (Object-Oriented Design Principles) được Robert C. Martin (Uncle Bob) đề xuất, nhằm giúp code dễ hiểu, dễ bảo trì, dễ mở rộng và hạn chế phụ thuộc lẫn nhau.
S – Single Responsibility Principle
Một class chỉ nên có một lý do duy nhất để thay đổi.
- Nghĩa là: Mỗi class nên chỉ tập trung xử lý một nhiệm vụ cụ thể.
- Nếu một class đảm nhận nhiều trách nhiệm, nó sẽ khó mở rộng và dễ gây bug khi thay đổi.
Wrong
class Report {
public function generate() { /* logic tạo báo cáo */ }
public function saveToFile() { /* logic lưu ra file */ }
}
Right
class ReportGenerator { public function generate() {} }
class ReportSaver { public function saveToFile($report) {} }
Lợi ích của việc sủ dụng SRP
- Dễ bảo trì: Thay đổi logic của một phần sẽ không ảnh hưởng đến phần khác.
- Dễ mở rộng: Có thể thêm chức năng mới bằng cách thêm class/service mới.
- Dễ test: Unit test từng phần riêng biệt, không phải test cả “mớ hỗn hợp”.
- Giảm coupling: Class không phụ thuộc chặt chẽ vào quá nhiều thứ.
Tuy nhiên cũng có bất cập
- Quá nhiều class: Nếu lạm dụng, hệ thống sẽ có quá nhiều file/class nhỏ, khó quản lý.
- Phân tách không khéo: Nếu chia quá vụn hoặc chia sai trách nhiệm, sẽ gây rối hơn là gọn.
- Tốn effort ban đầu: Cần thời gian phân tích rõ “một trách nhiệm là gì”.
- Ví dụ: Class User có nên vừa quản lý thông tin profile, vừa quản lý authentication không?
- Tùy vào context để tách thành UserProfile và AuthService.
