Dependency injection (DI) là một mẫu trong đó các đối tượng nhận các phụ thuộc của chúng từ bên ngoài thay vì tự tạo — cải thiện tính kiểm thử được, khả năng bảo trì, và tính linh hoạt. Trong Android, Hilt (xây trên Dagger) là framework DI được khuyến nghị.
DI là gì và tại sao
KHÔNG CÓ DI: một class TỰ TẠO các phụ thuộc của nó (kết nối chặt, khó test/thay đổi):
class UserRepo { val api = ApiService() } // tự tạo phụ thuộc của nó — cứng nhắc
CÓ DI: các phụ thuộc được CUNG CẤP từ bên ngoài (inject):
class UserRepo(val api: ApiService) // nhận nó → linh hoạt, kiểm thử được
→ Lợi ích: TÍNH KIỂM THỬ ĐƯỢC (inject mock/fake trong test), GIẢM PHỤ THUỘC, dễ hoán đổi
triển khai, quản lý phụ thuộc tập trung, ít boilerplate hơn (với một framework).
