Inversion of Control (IoC)
Thay vì flow thông thường là chính ứng dụng khởi tạo và gọi đến các thành phần khác, trong IoC, flow của ứng dụng được điều khiển bởi một framework hay một Container bên ngoài.
Hiểu đơn giản: class của bạn trao quyền điều khiển ra bên ngoài, qua việc tiêm (inject) các phụ thuộc (dependency). Mô hình thông thường: class tự khởi tạo các phụ thuộc bên trong để sử dụng.
IoC Container trong thực tế
- Laravel: “Service Container”
- Spring Boot: bộ IoC khởi tạo các “Bean”
Đều tuân theo nguyên tắc: đối tượng/dịch vụ được quản lý bởi một trung tâm gọi là Service Locator - từ trung tâm đăng ký (registry) này, lớp nào muốn dùng dịch vụ nào thì Locator cung cấp (khởi tạo nếu chưa, và trả về dịch vụ).
Lợi thế của IoC
- Điều khiển linh hoạt từ bên ngoài qua Service Locator: binding các instance tại runtime - inject một Interface, hoán đổi các class implement interface đó bất kỳ lúc nào.
- Tách rời khởi tạo và thực thi → cấu trúc linh hoạt, dễ thay thế và bảo trì.
- Dễ testing thông qua mocking các dependency.
Cách thực hiện IoC phổ biến nhất hiện nay: kết hợp Service Locator (framework cung cấp) và Dependency Injection.
Liên quan
- Dependency Inversion Principle - nguyên tắc SOLID mà IoC phục vụ
- Dependency Injection - kỹ thuật đi cùng