Page 55 - Ký sự code dạo
P. 55
LẬP TRÌNH VIÊN ĐÂU PHẢI CHỈ BIẾT CODE
DEPENDENCY INJECTION VÀ INVERSION OF CONTROL
Như đã nói ở bài trước, Dependency Injection (DI) và Inversion of
Control (IoC) là hai khái niệm khó hiểu nhưng rất phổ biến trong các
framework hiện đại. Mình cũng thấy vài bạn đã đi làm 1, 2 năm mà vẫn
còn “ngáo ngơ” về DI, IoC, chỉ biết sử dụng nhưng không hiểu rõ bản
chất của nó.
Do đó, mình viết bài này nhằm giải thích một cách đơn giản dễ hiểu về
Dependency Injection. Các bạn junior nên đọc thử vì DI được áp dụng
rất nhiều trong các ứng dụng doanh nghiệp và rất hay gặp khi đi làm
hoặc phỏng vấn.
Phần 1: Định nghĩa
Trong bài, mình hay dùng từ module. Trong thực tế, module này có thể
là 1 project, 1 file dll, hoặc một service. Để dễ hiểu, chỉ trong bài viết
này, các bạn hãy xem mỗi module là một class nhé.
Nhắc lại kiến thức
Trước khi bắt đầu với Dependency Injection, các bạn hãy đọc lại bài
viết về trước về những nguyên lý SOLID thiết kế và viết code. Nguyên
lý cuối cùng trong SOLID chính là Dependency Inversion:
1. Các module cấp cao không nên phụ thuộc vào các modules
cấp thấp. Cả 2 nên phụ thuộc vào abstraction.
2. Interface (abstraction) không nên phụ thuộc vào chi tiết, mà
ngược lại. ( Các class giao tiếp với nhau thông qua interface,
không phải thông qua implementation.)
Với cách code thông thường, các module cấp cao sẽ gọi các module cấp
thấp. Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra
các dependency. Khi module cấp thấp thay đổi, module cấp cao phải
thay đổi theo. Một thay đổi sẽ kéo theo hàng loạt thay đổi, giảm khả
năng bảo trì của code.
53