Dependency Injection đối với 1 số bạn vẫn là 1 khái niệm khá mơ hồ. Nếu bạn cũng nằm trong số người mơ hồ đấy hãy theo dõi bài viết này nhé

Dependency injection là gì?

Dependency injection là một kỹ thuật lập trình giúp tách một class độc lập với các biến phụ thuộc. Giải nghĩa theo Wikipedia ta có: Trong công nghệ phần mềm, Dependency injection là một kỹ thuật nhờ đó một đối tượng (hoặc phương thức tĩnh) có thể cung cấp các phụ thuộc của một đối tượng khác. Một biến phụ thuộc là một đối tượng có thể sử dụng (như một dịch vụ).

Dependency injection là gì? image 1

Và việc chuyển nhiệm vụ tạo đối tượng cho người khác và trực tiếp sử dụng biến phụ thuộc được gọi là dependency injection.

Các dependency injection phổ biến

  1. constructor injection: các biến phụ thuộc được cung cấp thông qua một hàm tạo lớp. 1.setter injection: client đưa ra một phương thức setter mà injector sử dụng để dependency injection 1.interface injection: biến phụ thuộc sẽ đưa ra một method mà để đưa biên này vào bất kỳ máy khách nào chạy qua. Máy khách sẽ phải triển khai một giao diện có chứa setter method chấp nhận biến phụ thuộc.

Nhiệm vụ của dependency injection

  1. Tạo các đối tượng
  2. Hiểu lớp nào sẽ cần những đối tượng nào
  3. Cung cấp cho lớp đó toàn bộ những đối tượng đó

Nếu có bất kỳ thay đổi nào xảy ra với các đối tượng, DI sẽ xem xét các thay đổi đó mà không quan tầm đến lớp đang sử dụng các đối tượng đó. Như vậy, nếu các đối tượng thay đổi trong tương lai, trách nhiệm của DI là cung cấp các đối tượng thích hợp cho lớp sử dụng các đối tượng đó.

Một số lợi ích và hạn chế từ việc sử dụng DI

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

Một số hạn chế của DI

  1. Kỹ thuật này tương đối phức tạp để học hỏi và sử dụng, và nếu lạm dụng DI có thể dẫn đến các vấn đề về quản lý và một số vấn đề khác.
  2. Có nhiều lỗi về thời gian biên dịch bị đẩy vào run-time.
  3. Các DI framework được triển khai tương phản hoặc lập trình động. Hoạt động này có thể cản trở sử dụng IDE tự động, chẳng hạn như "tìm tài liệu tham khảo", "hiển thị phân cấp cuộc gọi" và tái cấu trúc an toàn. Bạn có thể triển khai DI của riêng bạn (Pure Vanilla) hoặc sử dụng các thư viện, Framework của bên thứ ba.

Đảo ngược kiểm soát — khái niệm đằng sau DI

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

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

Thư viện và Framework triển khai Dependency injection

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

Viết câu trả lời

Drop Images

0 Bình luận