Dependency Injection (DI)
DI là gì
DI là design pattern một cách để hiện thực loC, trong đó các module phụ thuộc (dependency) sẽ được tiêm (inject) vào module cấp cao. Có thể hiểu DI một cách đơn giản như sau:
Các module không giao tiếp trực tiếp với nhau, mà thông qua interface. Module cấp thấp sẽ thực thi interface, module cấp cao sẽ gọi module cấp thấp thông qua interface.
Việc khởi tạo các module cấp thấp sẽ do DI container thực hiện.
Việc module gắn với interface nào sẽ được confic trong code hoặc trong file xml DI được dùng để làm giảm sự phụ thuộc giữa các module, dễ dàng hơn trong việc thay đổi module, bảo trì code và kiểm thử.
Có 3 dạng DI
Constructor Injection
: Các dependency sẽ được container tiêm vào một lớp thông quan phương thức khởi tạo của lớp đó.Setter Injection
: Các dependency sẽ được truyền vào một lớp thông qua các hàm setter.Interface Injection
: Lớp cần tiêm sẽ thực thi một interface. Interface nay chứa một hàm tên inject. Container sẽ tiêm dependency vào một lớp thông qua việc gọi hàm inject của interface đó.
DI thường áp dụng với những dự án lớp vì đảm bảo code dễ bảo trì, dễ thay đổi, hầu hết các framework nổi tiếng như laravel, spring, struts 2, asp.net .v.v đều hỗ trợ hoặc tích hợp sẵn DI.