Đóng gói (Nguyên tắc thiết kế)
⚠️ Đừng nhầm với trụ cột Encapsulation - Đóng gói. Trụ cột nói về cơ chế (gói dữ liệu + method, dùng
public/protected/private). Note này nói về Đóng gói như một NGUYÊN TẮC THIẾT KẾ: cô lập những phần hay thay đổi để chúng không làm hỏng phần còn lại.
“Trong thế giới đời thật, mọi thứ đều được đóng gói cẩn thận.” Bạn sẽ từ chối một máy giặt xù xì hở hết ruột, hay một chiếc TV quá nhiều nút khó hiểu. Thiết kế phần mềm cũng vậy: đóng gói tốt = chỉ chìa ra thứ cần thiết, giấu phần phức tạp bên trong.
🎯 Vì sao đóng gói tốt lại quan trọng (3 lợi ích)
- Giảm thiểu tác động chéo gây lỗi. Ứng dụng như chiếc xe 4 bánh: đóng gói tốt thì khi một bánh hỏng chỉ cần thay bánh đó, xe vẫn chạy. Đóng gói tồi thì một thay đổi bất thường của nghiệp vụ có thể “cán đinh” làm cả xe chết máy.
- Cải thiện tính tái sử dụng. Module được đóng gói gọn có thể dùng lại nhiều nơi - các thư viện PHP/NodeJS bạn cài chính là ví dụ tiêu biểu. → Code Reuse
- Tăng tính bảo mật. Chỉ cho tác động qua các phương thức nhất định. Ví dụ:
class Accountchỉ cho đổibalancequa methoddeposit(), bên trong cài đặt rõ các quy tắc an toàn → ứng dụng chắc chắn hơn nhiều.
📏 Đóng gói thể hiện ở 2 mức độ
- Mức phương thức (method-level): đảm bảo một phương thức chỉ làm một việc duy nhất.
- Mức Class (class-level): đảm bảo một class chỉ làm một việc duy nhất - tốt nhất mỗi class chỉ chứa một phương thức trách nhiệm chính (
handle/execute). Đây chính là mầm mống của Single Responsibility Principle và mô hình Action/Use-case (tác giả trình bày kỹ trong “Thiết kế hướng nghiệp vụ với Laravel”).
💡 Chốt lại
Đóng gói (nguyên tắc) giúp: bảo vệ dữ liệu · tăng linh hoạt · dễ bảo trì · giảm phụ thuộc · dễ tái sử dụng · tăng bảo mật → tạo ra phần mềm chất lượng cao, dễ mở rộng trong tương lai.
Liên quan
- Encapsulation - Đóng gói - trụ cột OOP (cơ chế phía sau nguyên tắc này)
- Single Responsibility Principle - “một class, một việc” là hệ quả trực tiếp
- Program to Interface - Tập trung vào trừu tượng, Composition over Inheritance - 2 nguyên tắc thiết kế còn lại cùng chương
- Code Reuse, Extensibility và Flexibility - mục tiêu mà đóng gói phục vụ