Dependency Injection là gì? Ưu điểm và nhược điểm của Dependency Injection

Để tiết kiệm thời kì và chi chi phí cho quá trình phát triển thành dự án phần mềm, 1 cấu trúc phần mềm và tổ chức code phải chăng sẽ giúp những lập trình viên dễ dàng hơn trong việc triển khai cũng như bảo trì về sau. Dependency Injection là 1 dạng design sample tương trợ siêu nhiều trong việc phát triển thành phần mềm. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về “Dependency Injection là gì” nhé!

Tìm hiểu về Dependency Injection

Lưu ý bé trước lúc khởi đầu: nội dung bài viết sẽ khá trừu tượng vì liên quan tới design sample. Gần như design sample đều mang tính trừu tượng (summary) cao và thường ko đi vào cụ thể. Bên cạnh ra, bài viết về SOLID là gì? 5 nguyên tắc của SOLID sẽ giúp bạn hiểu hơn về Dependency Injection đấy!

Trong bài viết, Tino Group sẽ giữ nguyên siêu nhiều thuật ngữ tiếng Anh chuyên ngành nhé!

Dependency là gì?

Trước lúc tìm hiểu về Dependency Injection, chúng ta sẽ tìm hiểu về Dependency nhé!

Dependency có nghĩa là sự phụ thuộc vào 1 thứ gì đấy. Thí dụ như bạn đang dùng smartphone quá nhiều và bạn đang đang trở nên phụ thuộc vào smartphone, ta có thể nói rằng: bạn đã Dependency vào smartphone.

Tương ứng có lập trình, chúng ta có 1 Class A phụ thuộc hoặc dùng 1 chức năng nào đấy của Class B. Ta sẽ gọi là Class A có quan hệ phụ thuộc có Class B.

Dependency Injection là gì?

Dependency Injection là 1 design sample được phát triển thành nhằm để giảm thiểu tối đa sự phụ thuộc giữa những Class có nhau. Điều này sẽ giúp cho việc tổ chức code trở nên “clear” hơn, dễ hiểu và trực quan hơn.

Lúc code clear, những lập trình viên được bổ sung vào dự án có thể dễ dàng hơn trong việc tìm hiểu về code, Class nào đấy trong phần mềm được viết ra có mục đích gì. Những việc nghe có vẻ đơn giản này lại có thể giúp cho dự án phần mềm dễ phát triển thành hơn và có thể dễ bảo trì hơn trong tương lai.

Xem Thêm  Mẹo khôi phục account Google bị xóa vĩnh viễn mà bất kỳ ai cũng khiến được

Giải thích 1 phương pháp khác, Dependency Injection là 1 kỹ thuật lập trình giúp tách Class độc lập có những biến phụ thuộc.

Như trong phần đầu đã nêu, Dependency Injection là 1 loại design sample, vậy có bao nhiêu loại Dependency Injection?

Những loại Dependency Injection

Thông thường, trong thực tế chúng ta sẽ gặp 3 loại Dependency Injection chính như sau:

  • Constructor Injection
  • Setter Injection
  • Interface Injection

Constructor Injection

Constructor Injection, những Dependency sẽ được những container truyền vào 1 Class thông qua Constructor của Class đấy.

Và đây là phương pháp thông dụng được nhiều người dùng nhất.

Setter Injection

Đối có Setter Injection, những Dependency sẽ được truyền vào 1 Class thông qua hàm Setter.

Interface Injection

Cuối cùng là Interface Injection, 1 trong những phương pháp rườm rà, phức tạp và ít được dùng nhất.

Lúc thực hành, Class cần inject sẽ buộc phải truyền vào 1 Interface. Trong đấy, Interface sẽ buộc phải chứa 1 hàm có tên là inject. Tiếp theo, Container sẽ thực hành truyền Dependency vào 1 Class bằng phương pháp gọi tên hàm inject đấy.

Vì sao nên dùng Dependency Injection?

Để bài viết trở nên trực quan hơn, Tino Group sẽ lấy 1 dí dụ như sau:

Chúng ta có 1 Class Xe_may và 1 vài thành phần như Po_xe hay Banh_xe:

  • Class Xe_may{
  • non-public Po_xe poxe= new Po_xe_thuong();
  • non-public Banh_xe banhxe = new Banh_xe_xin();
  • }

Như quý khách đã thấy, Class Xe_may sẽ chịu trách nhiệm trong việc khởi tạo những Dependency Object. Tuy nhiên, giả dụ bạn ko muốn dùng Po_xe_thuong mà muốn dùng Po_xe_khong_keu thì sao?

Bạn sẽ buộc phải tạo lại Object xe máy mới có new Dependency là Po_xe_khong_keu. Nhưng sau đấy, bạn lại muốn tiếp tục “độ” Pô xe thành 1 hình thái khác kêu lớn hơn hay lớn hơn hay thay luôn 1 cái Pô mới do bị Cảnh sát giao thông hỏi thăm thì sao?

Xem Thêm  Concern NFT (FEAR) là gì? Toàn tập về tiền điện tử FEAR

Thời điểm này, bạn sẽ buộc phải tạo lại 1 loạt code mới cho từng new Dependency và chưa chắc code của bạn có thể chạy. Chưa nói, code của bạn sẽ trở nên phức tạp và khó đọc hơn siêu nhiều!

Lúc này, chúng ta sẽ ứng dụng Dependency Injection vào để hạn chế và ngăn chặn sự phụ thuộc phức tạp đã nêu trong dí dụ trên.

Lúc dùng Dependency Injection, chúng ta sẽ có thể thay đổi Xe_may ở runtime vì Dependency đã truyền vào runtime thay vì compile time, điều này sẽ giúp bạn có thể:

Giảm bớt thời kì và chi chi phí trong việc sửa đổi, đọc hiểu và nâng cấp hệ thống của mình.

Lúc bạn thay đổi 1 Class, toàn bộ những Class khác sẽ tự động thay đổi theo và bạn sẽ ko cần buộc phải thay đổi thủ công từng Class.

Nói phương pháp khác, Dependency Injection chính là 1 biến trung gian tạo ra những loại Po_xe khác nhau và phân phối cho Class Xe_may của bạn. Việc này sẽ giúp Class Xe_may ko cần buộc phải phụ thuộc vào Po_xe hay Banh_xe cụ thể nào nữa!

Đồng nghĩa có việc đáp ứng được nguyên tắc thứ 5 trong SOLID.

Ưu điểm và hạn chế của Dependency Injection

Ưu điểm

1 trong những ưu điểm lớn nhất của Dependency Injection chính là giảm thiểu sự phụ thuộc lẫn nhau giữa những module. Điều này sẽ dẫn tới những ưu điểm/ lợi ích như sau:

  • Code của bạn “clear” 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 Check và việc check của bạn cũng sẽ trở nên đơn giản hơn lúc bạn có thể dễ dàng “tiêm” những mock Object vào trong những Class như phương pháp Dependency.
  • Lúc muốn thay đổi quan hệ giữa những Object, việc thực hành thay đổi sẽ trở nên dễ dàng hơn.

Hạn chế

Ko có bất cứ điều gì là hoàn hảo cả. Và Dependency Injection cũng có những hạn chế cần lưu tâm như sau:

  • Dependency Injection sẽ đòi hỏi siêu nhiều thời kì để người mới có thể thay đổi tư duy từ Dependency sang Dependency Injection.
  • Để thực hành Dependency Injection phải chăng nhất, lập trình viên sẽ cần buộc phải có siêu nhiều 5 kinh nghiệm cũng như tư duy và đã thực hành theo nguyên tắc SOLID.
  • Dependency Injection thực sự siêu phức tạp để học và để hiểu (nhưng ko khó hiểu bằng bạn gái đâu! Minh chứng là tôi viết được bài này nhưng hiểu bạn gái giận điều gì thì… Could rủi). Giả dụ lạm dụng Dependency Injection quá mức cũng sẽ dẫn tới nhiều rắc rối khác.
  • Dependency đã truyền vào runtime thay vì compile time. Do đấy, những lỗi ở compile time có thể bị đẩy vào runtime. Điều này sẽ khiến cho việc debug trở nên khó khăn. Giả dụ bạn debug bằng supply code, đôi lúc bạn sẽ ko biết implement nào được truyền vào khiến cho việc debug phát triển thành “cơn ác mộng” thực thụ.
  • 1 số chức năng như autocomplete hay discover references của 1 số IDE sẽ hoạt động ko đúng. 1 số Dependency Injection ẩn những Dependency. Vì thế, lỗi sẽ xuất hiện lúc bạn chạy chương trình thay vì biên dịch chương trình.
Xem Thêm  Gann Fans là gì? Cách Giao Dịch Với Gann Fans

Tới đây, Tino Group đã giúp bạn tìm hiểu về “Dependency Injection là gì” cũng như đưa ra ưu điểm, nhược điểm của Dependency Injection cùng có 1 dí dụ dễ hiểu. Tino Group hello vọng rằng bạn đã có thể hiểu về Dependency Injection. Giả dụ chẳng could bạn vẫn chưa “nạp” được, xem lại những nguyên tắc SOLID sẽ giúp ích cho bạn phần nào đấy!

Bài viết có tham khảo từ nhiều nguồn: TopDev, Viblo, Baeldung, CodeLearn, toidicodedao,…

Những câu hỏi thường gặp về Dependency Injection

CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO

  • Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Heart, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí MinhVăn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh
  • Điện thoại: 0364 333 333Tổng đài miễn chi phí: 1800 6734
  • Electronic mail: gross [email protected]
  • Web site: www.tino.org