Tìm hiểu về Dependency Injection nhiều kỹ sư vẫn đang gặp vấn đề trong việc phân biệt DI, Dependency Inversion và IoC. Qua nội dung sau đây sẽ cung cấp thêm nhiều nội dung đến độc giả về Dependency Injection, cùng tham khảo nhé.
Tìm hiểu về Dependency Injection là gì?

Có những khái niệm cho rằng, DI là một mô hình phát triển dựa trên nguyên lý IoC, tuy nhiên nhiều người lại xem Dependency Injection là một design pattern có cùng nguyên lý Dependency Inversion với IoC. Đây chính là một kỹ thuật quan trọng, giúp lập trình viên tiết kiệm thời gian và công sức trong lập trình hướng đối tượng.
Để trình bày một bí quyết kĩ lưỡng thì thì DI vận hành như sau:
Giả sử chúng ta có hai class, A và B. Khi Class A phải sử dụng một chức năng gì đấy của Class B thì có nghĩa là Class A dựa vào Class B. Mặt khác, trong ngôn ngữ lập trình Java, trước khi Class A có khả năng dùng method của class B thì class A phải tạo ra một object của class B. Việc chuyển giao trách nhiệm tạo Object đó cho một ai đó khác và trực tiếp sử dụng mối tùy thuộc giữa A và B thì được gọi là Dependency Injection.
Xem thêm :Những Công Cụ Viết Code Lập Trình Web Tốt Nhất Cho Lập Trình Viên
Có 3 loại dependency injection
Constructor injection
Các dependency đc bổ sung thông qua constructor của class.
Setter injection
Client tạo ra một setter method để các class khác có thể dùng chúng để cấp dependency.
Interface injection
Dependency sẽ bổ sung một hàm injector để inject nó vào bất kì client nào đc truyền vào. Các client phải implement một interface mà có một setter method dành cho việc nhận dependency.
Vì sao nên sử dụng Dependency Injection?
Để bài viết trở nên trực quan hơn, Tino group sẽ lấy một ví dụ như sau:
Con người có một Class Xe_may và một số thành phần như Po_xe hay Banh_xe:
- Class Xe_may
- private Po_xe poxe= new Po_xe_thuong();
- private Banh_xe banhxe = new Banh_xe_xin();
- …
- …
Như các nàng đã thấy, Class Xe_may sẽ gánh chịu hậu quả trong việc hình thành các Dependency Object. Tuy nhiên, nếu như bạn không muốn sử dụng Po_xe_thuong mà muốn sử dụng Po_xe_khong_keu thì sao?
Bạn sẽ phải tạo lại Object xe máy mới với new Dependency là Po_xe_khong_keu. tuy nhiên sau đấy, bạn lại mong muốn bắt đầu “độ” Pô xe thành một hình thái khác kêu to hơn hay to hơn hay thay luôn một chiếc Pô mới do bị Cảnh sát giao thông hỏi thăm thì sao?
Ưu điểm và làm giảm của Dependency Injection

Điểm tốt nhất
Một trong các điểm tốt nhất lớn nhất của Dependency Injection chính là giảm thiểu sự tùy thuộc lẫn nhau giữa các module. Điều này sẽ gây ra các ưu điểm/ lợi ích như sau:
- Code của bạn “clean” hơn, dễ hiểu và dễ hơn trong việc thay thế, bảo trì phần mềm.
- Việc viết Unit Test và việc test của bạn cũng sẽ trở nên đơn giản hơn khi bạn có khả năng giản đơn “tiêm” các mock Object vào trong các Class như cách Dependency.
- Khi mong muốn thay đổi quan hệ giữa các Object, việc hành động thay đổi sẽ trở nên dễ dàng hơn.
Hạn chế
Tìm hiểu về Dependency Injection không hề có bất cứ điều gì là hoàn hảo cả. Và Dependency Injection cũng có nhiều làm giảm cần lưu tâm như sau:
- Dependency Injection sẽ yêu cầu cực kì nhiều thời gian để nhân viên mới có thể thay đổi tư duy từ Dependency sang Dependency Injection.
- Để thực thi Dependency Injection tối ưu, lập trình viên sẽ cần phải có vô số năm kinh nghiệm cũng giống như tư duy và đã làm theo nguyên tắc SOLID.
- Dependency Injection thật sự rất phức tạp để học và để hiểu (nhưng không phức tạp bằng bạn gái đâu! Chứng cứ rõ ràng là tôi viết được bài này tuy nhiên hiểu bạn gái giận điều gì thì… May rủi). Nếu lạm dụng Dependency Injection quá mức cũng sẽ dẫn tới nhiều rắc rối khác.
Xem thêm: Thiết kế website ở đâu tốt và uy tín nhất hiện nay?
Những câu hỏi thường gặp về Dependency Injection
Debug là gì?
Debug là một các bước gỡ lỗi trong phần mềm. Quá trình gỡ lỗi này sẽ có sự giúp đỡ của các IDE hoặc bạn có thể tìm đọc sự giúp đỡ của những người đi trước. Debug là một việc khó khăn đối với các lập trình viên có kinh nghiệm và là “cơn ác mộng” đối với các lập trình viên mới vào nghề.
5 nguyên tắc của SOLID là gì?
5 nguyên tắc của SOLID bao gồm:
- Single-responsibility Principle – Nguyên tắc trách nhiệm đơn lẻ
- Open-closed Principle – Nguyên tắc đóng mở
- Liskov Substitution Principle – Nguyên tắc phân vùng Liskov
- Interface Segregation Principle – Nguyên tắc phân tách giao diện
- Dependency Inversion Principle – Nguyên tắc đảo ngược phụ thuộc
Tại sao clean code lại quan trọng?

Tìm hiểu về Dependency Injection Clean code hay code được viết gọn gàng, ngăn nắp và dễ hiểu. Việc làm này sẽ giúp cho:
- Công tác thực hiện công việc group trở nên hiệu quả hơn
- Giản đơn đọc và debug hơn
- Sửa đổi và cải thiện trong việc tăng trưởng thêm module và bảo trì ứng dụng
- Hỗ trợ bạn tự tin ăn nói với đồng nghiệp hơn khi code của bạn để đọc và dễ hiểu.
Bên cạnh đó, bạn còn có khả năng tái dùng code nhiều lần trong nhiều phần mềm, chương trình không giống nhau.
Xem thêm :Tổng kết 4 phương pháp rèn luyện tư duy lập trình mới nhất 2020
Qua bài viết trên của Coder.com.vn đã cung cấp các thông tin về tìm hiểu về Dependency Injection và các phân loại. Hy vọng những thông tin trên của bài viết sẽ hữu ích với các bạn đọc, cùng tham khảo nhé.
Mỹ Phượng – Tổng hợp & chỉnh sửa
Tham khảo ( viblo.asia, topdev.vn, … )
Bình luận về chủ đề post