DI là gì
DI là design pattern một cách để hiện thực IoC, 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.
Ví dụ: Để giao tiếp với CSDL ta có interface IDatabase, các
module cấp thấp là XMLDatabase, SQLDatabase. Module cấp cao là CustomerBusiness
sẽ chỉ sử dụng interface IDatabase.
Việc khởi tạo các module cấp thấp sẽ do DI container thực hiện
Ví dụ: Trong module CustomerBusiness, ta sẽ không khởi tạo
IDatabase db = new XMLDatabase(), việc này sẽ do DI container thực hiện. Module
CustomerBusiness sẽ không biết gì về module XMLDatabase hay SQLDatabase.
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
1. 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 đó.
2. Setter Injection: Các dependency sẽ được truyền vào một lớp
thông qua các hàm setter.
3. 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.
إرسال تعليق