Dependency injection là gì? Hiểu rõ Dependency injection với 5 phút

0
1035

Dependency Injection là gì là thắc mắc của  rất nhiều lập trình viên phần mềm. Tuy nhiên, là một khái niệm khó nên không phải lập trình phần mềm nào cũng có thể nắm rõ được. Vậy nên, nếu như bạn đang tìm hiểu về Dependency Injection thì đừng bỏ qua những kiến thức mà ITNavi chia sẻ trong bài viết sau. 

Dependency Injection là gì?

Dưới đây là những khái niệm liên quan đến Dependency Injection là gì đã được nhiều chuyên gia lý giải mà bạn có thể tham khảo. 

Theo nguồn Wikipedia thì Dependency Injection được hiểu là một kỹ thuật, theo đó thì một đối tượng sẽ cung cấp các phụ thuộc của đối tượng khác. Mỗi một phụ thuộc chính là đối tượng có khả năng được sử dụng. 

Định nghĩa Dependency Injection là gì?

Định nghĩa Dependency Injection là gì?

Ngoài ra, những chuyên gia phân tích khác luôn cân nhắc kỹ thuật viên hiểu về Dependency Injection như sau: 

Dependency injection được định nghĩa là kỹ thuật lập trình có khả năng hỗ trợ tách một class độc lập với những biến phụ thuộc khác.

Tuy nhiên, đây là một trong những khái niệm đã được nhận định là rất khó và bạn thường không thể hiểu ngay trong lần đầu tiên đọc nó. Chính vì vậy, để bạn hiểu rõ hơn về định nghĩa này thì dưới góc độ kỹ thuật chúng ta cùng nhau phân tích đặc điểm tổng quan và thông thường nhất của nó nhé. 

Sau đây là phân tích về các phụ thuộc ở trong lập trình: 

Khi một lớp Á sử dụng các chức năng của lớp B thì có nghĩa là lớp A có một phụ thuộc với lớp B. 

Trong Java, trước khi bạn sử dụng những method của lớp khác thì buộc bạn cần phải tạo ra những đối tượng của rlowps đó.  Điều này có nghĩa là, lớp A cần phải tạo ra một đối tượng mới của lớp B).

Và khi đó, việc điều chuyển nhiệm vụ tạo đối tượng dành cho các người khác và sẽ trực tiếp sử dụng một biến phụ thuộc được gọi là Dependency Injection.

Bạn đọc tham khảo thêm: 

Tuyển dụng java spring lương cao chế độ hấp dẫn

Việc làm php lương cao chế độ hấp dẫn

Các loại của Dependency Injection là gì?

Hiện nay, đang có 3 loại Dependency Injection phổ biến là: 

Loại 1: Constructor Injection: Những biến phụ này sẽ được cung cấp dựa vào một hàm tạo lớp mới. 

Loại 2. Setter Injection: Client sẽ đưa ra một phương thức dạng setter mà khi đó Injector sẽ được sử dụng nhằm Dependency Injection. 

Ví dụ về Dependency Injection 

Ví dụ về Dependency Injection 

Loại 3. Interface Injection: Các biến phụ thuộc sẽ đưa một method mà để có thể đưa được biên này vào bất kỳ loại máy khách chạy ngang qua nào. Khi đó, máy khách cần phải triển khai một giao diện có chứa setter method để có thể chấp nhận cho các biến phụ thuộc. 

Bạn đọc tham khảo thêm:

Product Placement là gì? Xu hướng Product Placement hiện nay

Elasticsearch là gì? Kiến thức tổng quan về Elasticsearch

Nhiệm vụ của Dependency Injection là gì?

Dependency Injection được tạo ra và sử dụng để giải quyết các nhiệm vụ như sau: 

  • Tạo các đối tượng
  • Nắm bắt các đối tượng nào sẽ phù hợp với lớp nào. 
  • Thực hiện cung cấp cho những lớp đó toàn bộ mọi đối tượng. 

Nếu như xuất hiện bất kỳ thay đổi nào xảy ra với đối tượng thì DI sẽ xem xét kỹ những thay đổi đó mà thường không quan tâm đến các lớp đang sử dụng những đối tượng đó. 

Bởi nếu làm như vậy thì các đối tượng mới có thể được thay đổi vả trong tương lai với trách nhiệm của các DI là cung cấp mọi đối tượng thích hợp với những lớp đang sử dụng các đối tượng đó. 

Ngoài ra, Dependency Injection còn có nhiệm vụ thực hiện đảo ngược kiểm soát — khái niệm đằng sau DI

Một số lớp bạn không nên được cấu hình tương tự với các biến phụ tĩnh mà bạn cần cấu hình bởi 1 số lớp khác từ bên ngoài. Đây chính là nguyên tắc trong S.O.L.I.D, cũng là 5 nguyên tắc cơ bản liên quan đến lập trình hướng đối tượng mà bạn cần nắm rõ. Dựa theo nguyên tắc này thì một lớp cần nên dựa vào abstraction chứ không phải concretions (dựa theo thuật ngữ đơn giản, mã hóa cứng – hard-coded).

Theo đó, thì một lớp nên tập trung vào hoàn thành những nhiệm vụ của mình chứ không cần tạo ra các đối tượng cần thiết dành cho việc thực hiện nhiệm vụ đó. 

Nhiệm vụ của Dependency Injection là gì?

Nhiệm vụ của Dependency Injection là gì?

Các lợi ích và hạn chế khi sử dụng Dependency Injection là gì?

Dưới đây là những lợi ích cũng như hạn chế còn tồn tại của Dependency Injection mà bạn có thể tham khảo là:

Lợi ích mang lại của Dependency Injection là gì?

  • Thực hiện hỗ trợ kiểm tra Unit
  • Giảm boiler plate code do việc tạo ra các biến phụ thuộc đã được injector thực hiện.
  • Bạn có thể thực hiện dễ dàng các mở rộng cho ứng dụng.
  • Dependency Injection hỗ trợ kích hoạt những kết nối cần thiết chặt chẽ hơn. Mà đây chính là một trong những yếu tố đặc biệt quan trọng trong lập trình ứng dụng. 

Những hạn chế còn tồn tại của DI

Ngoài những điểm mạnh trên thì việc sử dụng Dependency Injection vẫn còn tồn tại các mặt hạn chế như: 

  • Đây là kỹ thuật khá phức tạp khi đòi hỏi sử dụng, nếu như bạn làm dụng Dependency Injection thì có thể dẫn đến lỗ hổng liên quan đến vấn đề quản lý và một số vấn đề có liên quan khác. 
  • Thường sẽ có nhiều lỗi liên quan đến thời gian biên dịch có thể bị đẩy vào run-time.
  • Các DI framework sẽ được triển khai tương phản hoặc thực hiện lập trình động. Hoạt động này sẽ giúp bạn có thể cản trở việc sử dụng IDE tự động. Điều này có nghĩa như, khi bạn “tìm tài liệu tham khảo”, “hiển thị phân cấp cuộc gọi” hoặc thực hiện tái cấu trúc an toàn. Bởi vậy, bạn hoàn toàn có thể triển khai Dependency Injection riêng của chính mình hoặc sử dụng những thư viện Framework của bên thứ ba khác.
  • Khó khăn lớn nhất với những người mới vào làm bằng DI sẽ không thể hiểu rõ được tư tưởng của nó. Điều này làm cho quá trình làm Dependency Injection sẽ bị nhập nhằng và các injector bị ràng buộc mà không thể thoát hẳn ra dựa theo chính tư tưởng của DI. 

Các thư viện và Framework có thể triển khai DI

Bạn có thể sử dụng, áp dụng các Framework cũng như thư viện sau đây để có thể triển khai Dependency Injection:

  • Spring (Java)
  • Google Guice (Java)
  • Dagger (Java và Android)
  • Castle Windsor (.NET)
  • Unity (.NET)

Dependency Injection được nhiều lập trình viên sử dụng

Dependency Injection được nhiều lập trình viên sử dụng

Tại sao cần sử dụng Dependency Injection? Khi nào thì dùng và nên thực hiện nó ra sao?

Bạn có thể thực hiện Dependency Injection dựa trên các nguyên tắc như sau:

  • Những class này không quá phụ thuộc trực tiếp lẫn nhau mà thay vào đó là chúng sẽ liên kết với nhau thông qua một Interface hoặc base Class (điều này đối với những ngôn ngữ không được hỗ trợ Interface). 
  • Việc thực hiện khởi tạo các Class thì đều sẽ cho các Interface quản lý thay cho những class phụ thuộc vào nó. 

Ví dụ: Giả sử bạn có một Class Car và trong đó có vài object khác như Wheel hay Battery, thì ta sẽ có: 

class Car{

     private Wheels wheel = new MRFWheels();

     private Battery battery = new ExcideBattery();

     ….

     ….

}

 

Ở đây thì class Car sẽ chịu trách nhiệm thực hiện khởi tạo tất cả các dependencyobject. Nhưng chuyện gì sẽ xảy ra nếu như bạn muốn bỏ MRFWheels và thay thế chúng bằng BMWWheels.

Vào lúc này, chúng ta cần phải tạo lại những đối tượng car với các phụ thuộc mới chính là BMWWheels. Sau này nữa, nếu bạn muốn độ bánh xe lên thay vì các bánh khác thì sẽ ra sao. Nếu như bạn thêm một loạt code và khi đó chưa chắc chạy được bởi vì việc này hoàn toàn rất khó nhọc.

Dependency Injection được xem là một trong những dạng Design Pattern được thiết kế giúp ngăn chặn những sự phụ thuộc mà chúng tôi đã nêu ở phần trên. Bởi vì chúng ta thay đổi được Wheel ở runtime do dependency có truyền được vào ở runtime thay cho compile time. Điều này có thể giúp giảm các chi phí khi sửa đổi cũng như nâng cấp cho hệ thống. Vậy nên, khi bạn thực hiện thay đổi cho một class A thì những class có chứa biến kiểu class A sẽ không cần phải thay đổi theo. 

Bạn có thể hiểu như sau: Dependency Injection chính là người trung gian có trách nhiệm tạo ra những loại wheel khác nhau rồi cung cấp chúng cho class car. Việc này sẽ làm cho class Car không cần phải quá phụ thuộc vào bất kỳ một wheels hoặc Battery cụ thể nào nữa. 

Tổng kết

Trên đây là những kiến thức liên quan đến Dependency Injection mà ITNavi đã tổng hợp lại. Hy vọng, bài viết sẽ giúp ích được phần nào cho lập trình viên khi ứng dụng Dependency Injection vào công việc của mình. Bạn đừng quên tìm hiểu rõ Dependency Injection là gì trước khi bắt đầu làm quen với nó để có thể tránh được những sai sót không đáng có nhé!

LEAVE A REPLY

Please enter your comment!
Please enter your name here