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

Nguồn bài viết: Dependency Injection là gì? Ưu điểm và nhược điểm của Dependency Injection

Để tiết kiệm thời gian và chi phí cho việc phát triển dự án phần mềm, một cấu trúc phần mềm và tổ chức mã tốt sẽ giúp lập trình viên triển khai và bảo trì sau này dễ dàng hơn. Dependency Injection là một dạng thiết kế mẫu Giúp rất nhiều trong việc phát triển phần mềm. Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về “Dependency Injection” là gì!

Tìm hiểu về Tiêm phụ thuộc

Lưu ý nhỏ trước khi bắt đầu: nội dung bài viết sẽ khá trừu tượng vì liên quan đến design pattern. Hầu hết các mẫu thiết kế đều mang tính trừu tượng cao và thường không đi vào cụ thể. Ngoài ra, bài viết RẮN là gì? 5 nguyên tắc của SOLID sẽ giúp bạn hiểu rõ hơn về Dependency Injection!

Trong bài viết thuthuatkiemtien.com sẽ lưu giữ rất nhiều thuật ngữ tiếng anh chuyên ngành nhé!

Phụ thuộc là gì?

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

Sự phụ thuộc có nghĩa là phụ thuộc vào một cái gì đó. Ví dụ, nếu bạn đang sử dụng điện thoại thông minh quá nhiều và bạn đang trở nên phụ thuộc vào điện thoại thông minh, chúng tôi có thể nói: bạn đã trở nên phụ thuộc vào điện thoại thông minh.

phụ thuộc-tiêm-la-gi

Tương ứng với việc lập trình, chúng ta có một Class A phụ thuộc hoặc sử dụng một chức năng nào đó của Class B. Chúng ta sẽ gọi nó là Class A có quan hệ phụ thuộc với Class B.

Dependency Injection là gì?

Tiêm phụ thuộc Là một thiết kế mẫu được phát triển để giảm thiểu sự phụ thuộc giữa các lớp. Điều này sẽ làm cho việc tổ chức mã “sạch” hơn, dễ hiểu và trực quan hơn.

Khi mã sạch, các lập trình viên được thêm vào dự án có thể dễ dàng tìm hiểu về mã, các lớp nhất định trong phần mềm được viết để làm gì. Những điều tưởng như đơn giản này có thể làm cho một dự án phần mềm dễ phát triển hơn và có thể dễ bảo trì hơn trong tương lai.

phụ thuộc-tiêm-la-gi

Để giải thích nó theo cách khác, Tiêm phụ thuộc là một kỹ thuật lập trình phân tách các lớp độc lập khỏi các biến phụ thuộc.

Như đã nói ở phần đầu, Dependency Injection là một loại design pattern, vậy có bao nhiêu loại Dependency Injection?

Các loại tiêm phụ thuộc

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
  • Tiêm giao diện

Constructor Injection

Với Constructor Injection, Sự phụ thuộc sẽ được các vùng chứa chuyển vào một Lớp thông qua Khối khởi tạo của Lớp đó.

Và đây là phương pháp được sử dụng phổ biến nhất.

Setter Injection

Đối với Setter Injection, các Phụ thuộc sẽ được chuyển vào một Lớp thông qua hàm Setter.

Tiêm giao diện

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

Khi được triển khai, Lớp cần tiêm sẽ phải vượt qua Giao diện. Trong đó, Interface sẽ phải chứa một hàm có tên là tiêm. Tiếp theo, Vùng chứa sẽ chuyển Phụ thuộc vào một Lớp bằng cách gọi tên hàm tiêm.

phụ thuộc-tiêm-la-gi

Tại sao bạn nên sử dụng Dependency Injection?

Để bài viết trực quan hơn, thuthuatkiemtien.com sẽ lấy một ví dụ như sau:

Chúng tôi có một lớp Xe_may và một số thành phần như Po_xe hoặc Banh_xe:

  • Class Xe_may {
  • private Po_xe poxe = new Po_xe_thuong ();
  • private Banh_xe_xin () = new Banh_xe_xin ();
  • }

Như bạn đã thấy, Class Xe_may sẽ chịu trách nhiệm khởi tạo Đối tượng phụ thuộc. Tuy nhiên, nếu bạn không muốn sử dụng Po_xe_thuong muốn sử dụng Po_xe_not_keu Vậy thì sao?

Bạn sẽ phải tạo lại một Đối tượng Xe máy mới với Phụ thuộc mới là Po_xe_not_keu. Nhưng sau đó, bạn muốn tiếp tục “tùy biến” Pô thành một hình thức khác nghe to hơn, to hơn hoặc đổi Pô mới vì bị CSGT yêu cầu?

Tại thời điểm này, bạn sẽ phải tạo lại một loạt mã mới cho mỗi phụ thuộc mới và không chắc mã của bạn có thể chạy. Chưa kể, mã của bạn sẽ trở nên phức tạp và khó đọc hơn rất nhiều!

Tại thời điểm này, chúng tôi sẽ áp dụng Tiêm phụ thuộc để hạn chế và ngăn chặn các phụ thuộc phức tạp được nêu trong ví dụ trên.

Khi sử dụng Dependency Injection, chúng tôi sẽ có thể thay đổi Xe_may trong thời gian chạy vì Phụ thuộc được chuyển vào thời gian chạy thay vì thời gian biên dịch, điều này sẽ giúp bạn:

Giảm thời gian và chi phí trong việc sửa đổi, đọc và nâng cấp hệ thống của bạn.

Khi bạn thay đổi 1 Lớp, tất cả các Lớp khác sẽ tự động thay đổi và bạn không cần phải thay đổi từng Lớp theo cách thủ công.

Nói cách khác, Dependency Injection là một biến trung gian tạo ra các loại Po_xe khác nhau và cung cấp nó cho Lớp Xe_may của bạn. Điều này sẽ giúp lớp Xe_may không cần phụ thuộc vào bất kỳ Po_xe hoặc Ball_Xe cụ thể nào!

Có nghĩa là để gặp gỡ Nguyên tắc thứ 5 trong SOLID.

phụ thuộc-tiêm-la-gi

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

Thuận lợi

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

  • Mã của bạn “sạch” hơn, dễ hiểu hơn và dễ thay thế và bảo trì hơn.
  • Bài kiểm tra Viết đơn vị và các bài kiểm tra của bạn cũng sẽ trở nên đơn giản hơn khi bạn có thể dễ dàng “tiêm” các Đối tượng giả vào các Lớp như Phụ thuộc.
  • Khi bạn muốn thay đổi mối quan hệ giữa các Đối tượng, việc thay đổi sẽ trở nên dễ dàng hơn.

Giới hạn

Không có gì là hoàn hảo cả. Và Dependency Injection cũng có những hạn chế sau đây cần lưu ý:

  • Dependency Injection sẽ đòi hỏi nhiều thời gian để người mới thay đổi tư duy của họ từ Dependency sang Dependency Injection.
  • Để triển khai Dependency Injection tốt nhất, lập trình viên sẽ cần có nhiều năm kinh nghiệm và tư duy và tuân theo nguyên tắc SOLID.
  • Dependency Injection thực sự phức tạp để tìm hiểu và hiểu (nhưng không khó như bạn gái! Bằng chứng là tôi có thể viết bài này nhưng hiểu bạn gái đang tức giận về điều gì… Lucky). Việc lạm dụng Dependency Injection cũng sẽ dẫn đến nhiều vấn đề khác.
  • Sự phụ thuộc được chuyển sang thời gian chạy thay vì thời gian biên dịch. Do đó, các lỗi tại thời điểm biên dịch có thể được đẩy sang thời gian chạy. Điều này sẽ làm cho việc gỡ lỗi trở nên khó khăn. Nếu bạn gỡ lỗi bằng mã nguồn, đôi khi bạn sẽ không biết việc triển khai nào được thông qua khiến việc gỡ lỗi trở thành một “cơn ác mộng” thực sự.
  • Một số chức năng như tự động hoàn thành hoặc tìm tham chiếu của một số IDE sẽ không hoạt động bình thường. Một số phụ thuộc Injection ẩn các phụ thuộc. Do đó, lỗi sẽ xuất hiện khi bạn chạy chương trình thay vì biên dịch chương trình.

Đến đây, thuthuatkiemtien.com đã giúp bạn tìm hiểu về “Dependency Injection là gì” cũng như đưa ra những ưu nhược điểm của Dependency Injection cùng với ví dụ dễ hiểu. thuthuatkiemtien.com hy vọng rằng bạn có thể hiểu rõ về Dependency Injection. Nếu chẳng may bạn vẫn không “load” được thì việc xem lại các nguyên tắc của SOLID sẽ giúp bạn phần nào đấy!

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

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

Gỡ lỗi là gì?

Gỡ lỗi là một quá trình gỡ lỗi trong phần mềm. Quá trình gỡ lỗi này sẽ có sự hỗ trợ của các IDE hoặc bạn có thể tham khảo sự hỗ trợ của các bậc tiền bối. Gỡ lỗi là một công việc phức tạp đối với những lập trình viên có kinh nghiệm và là “cơn ác mộng” đối với những 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:

  • Nguyên tắc một người chịu trách nhiệm
  • Nguyên tắc đóng mở
  • Nguyên tắc thay thế Liskov – Nguyên tắc phân vùng Liskov
  • Nguyên tắc phân tách giao diện
  • Nguyên tắc đảo ngược phụ thuộc – Nguyên tắc đảo ngược phụ thuộc

Tại sao mã sạch lại quan trọng?

Mã sạch hoặc mã được viết gọn gàng, ngăn nắp và dễ hiểu. Điều này sẽ giúp:

  • Làm việc nhóm trở nên hiệu quả hơn
  • Dễ dàng đọc và gỡ lỗi hơn
  • Tối ưu hóa trong việc phát triển thêm mô-đun và bảo trì phần mềm
  • Giúp bạn tự tin hơn khi giao tiếp với đồng nghiệp khi mã của bạn dễ đọc và dễ hiểu.

Ngoài ra, bạn có thể sử dụng lại mã nhiều lần trong nhiều phần mềm và chương trình khác nhau.

Mẫu thiết kế là gì?

Mẫu thiết kế dịch sang tiếng Việt là kiểu dáng. Đây là tập hợp các giải pháp tối ưu hóa, tái sử dụng cho các vấn đề lập trình mà các lập trình viên thường gặp phải.

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

  • Trụ sở chính: L17-11, Lầu 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, P. Bến Nghé, Q.1, TP.
    VPĐD: 42 Trần Phú, P.4, Q.5, TP.HCM
  • Điện thoại: 0364 333 333
    Tổng đài miễn cước: 1800 6734
  • Email: sales@tino.org
  • Trang web: www.tino.org

Xem thêm nhiều bài viết về : Kiến Thức Cơ Bản

Bản quyền thuộc: thuthuatkiemtien.com



from thuthuatkiemtien.com https://ift.tt/3Evo85F
via thuthuatkiemtien.com

Nhận xét

Bài đăng phổ biến từ blog này

3 Cách để kiếm tiền từ blog WordPress

Google AdSense bỏ giới hạn số lượng quảng cáo trên mỗi trang

Toàn tập danh sách liên kết đơn trong C++