Giới thiệu

Dagger 2 - là một trong những dependency injection framework. Nó được áp dụng nhằm genaration code thông qua các base anotation, code được genartion ra rất dễ dàng phát âm cùng debug

*

Chuẩn bị

Trước Lúc bắt đầu mình thích các bạn khám phá qua về SOLID principles chính là hầu hết nguyên lý kiến thiết với viết code. Sau kia ở đây mình sẽ chỉ nhấn mạnh nguyên lý sau cùng SOLID đó đó là Dependency Inversion:

Dependency inversion principle

1. Các module cao cấp tránh việc dựa vào vào những modules cấp thấp. Cả 2 phải phụ thuộc vào abstraction.2. Interface (abstraction) tránh việc dựa vào vào cụ thể, mà trái ngược. ( Các class giao tiếp cùng nhau trải qua interface, không hẳn thông qua implementation.)Với giải pháp code thông thường, các module V.I.P đã Call các module cấp thấp. Module cao cấp vẫn phụ thuộc vào cùng module cấp thấp, điều đó tạo nên những dependency. lúc module cấp thấp chuyển đổi, module cấp cao nên chuyển đổi theo. Một thay đổi đang kéo theo 1 loạt biến hóa, sút kỹ năng gia hạn của code.Chính vị vậy nêú tuân theo Dependendy Inversion principle, các module cùng phụ thuộc vào vào 1 interface không thay đổi. Ta hoàn toàn có thể thuận tiện sửa chữa, sửa đổi module cấp thấp mà lại không ảnh hưởng gì tới module cao cấp.

Bạn đang xem: Dagger là gì

Định nghĩa với định nghĩa DI

Lúc bấy giờ, những xây dựng viên xuất xắc lẫn lộn giữa những có mang Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba quan niệm này giống như nhau dẫu vậy không hoàn toàn như là nhau.

*
Sự biệt lập giữa 3 khái niệm trên:

Dependency Inversion: Đây là một nguyên tắc nhằm thiết kế và viết code.Inversion of Control: Đây là một trong thiết kế pattern được tạo nên để code hoàn toàn có thể vâng lệnh nguyên lý Dependency Inversion. Có nhiều cách lúc này pattern này: ServiceLocator, Event, Delegate, … Dependency Injection là 1 trong số biện pháp đó.Dependency Injection: Đây là một cách để hiện thực Inversion of Control Pattern (Có thể coi nó là một trong những kiến thiết pattern riêng cũng được). Các module dựa vào (dependency) sẽ được inject vào module cao cấp.

Xem thêm: Màng Tăng Sinh Trước Võng Mạc Là Bệnh Màng Tang Là Gì ? Triệu Chứng & Thuốc

cũng có thể gọi Dependency Injection một cách dễ dàng và đơn giản như sau:

Các module ko giao tiếp thẳng cùng nhau, mà lại thông qua interface. Module thấp cấp đang implement interface, module cao cấp đang Hotline module cấp thấp trải qua interface.

Ví dụ: Để giao tiếp với database, ta có interface IDatabase, những module thấp cấp là XMLDatabase, SQLDatabase.Module cao cấp là CustomerBusiness vẫn chỉ áp dụng interface IDatabase.Việc khởi tạo những module cấp thấp đã vì chưng DI Container tiến hành. Ví dụ: Trong module CustomerBusiness, ta sẽ không còn khởi chế tạo IDatabase db = new XMLDatabase(), câu hỏi này đã bởi DI Container thực hiện. Module CustomerBusiness sẽ không biết gì về module XMLDatabase tốt SQLDatabase.Việc Module như thế nào thêm với interface làm sao sẽ được config trong code hoặc vào tệp tin XML.DI được dùng để triển khai sút sự nhờ vào giữa những module, dễ dãi rộng trong câu hỏi thay đổi module, duy trì code cùng testing.

Dependency Injection with Dagger 2

Dagger 2 là gì ?

Là một dependency injector, không giống với các dependency injector giành riêng cho việc thực hiện vận dụng Enterprise như Spring IoC tốt JavaEE CDI. Dagger Được kiến tạo cho những trang bị low-kết thúc, nhỏ tuổi gọn gàng nhưng mà vẫn không thiếu thốn nhân kiệt.Hầu không còn những dependency injector sử dụng reflection để tạo nên với inject các module. Reflection nkhô hanh cùng tương thích cho các version Android cũ nhưng mà reflection gây nên khó khăn rất lớn trong câu hỏi debug giỏi tracking Khi gặp lỗi.Thay bằng bài toán thực hiện reflection Dagger sử dụng một trình biên dịch trước (pre-compiler), trình biên nhờn này tạo ra tất cả các lớp, những module cần thiết để làm bài toán.Dagger không nhiều khỏe khoắn so với các dependency injector khác mà lại vắt vào đó Dagger lại dìu dịu cùng dễ dàng áp dụng tương tự như gần như là vứt đi được điểm yếu kém của dependency injector là khả năng tracking bugDagger 2 thực hiện hầu hết những anotation sau :

Định nghĩa dependency providers (object providers)

Trong Dagger 2 class gồm anotation
Module tất cả trách nhiệm hỗ trợ các object có thể được inject.Các class điều đó hoàn toàn có thể định nghĩa những cách tiến hành cùng với anotated
Provides. Các đối tượng người sử dụng trả về trường đoản cú những cách tiến hành này có sẵn dependency để inject.Định nghĩa dependency (object consumers) quý khách có thể áp dụng
Inject cùng với constructor,Dagger 2 rất có thể áp dụng 1 instance này nhằm hoàn thành dependencies.Như vậy được triển khai để rời Việc define những cách làm
Component được sử dụng trong một interface.Interface này được áp dụng vày Dagger2 nhằm mục đích generate code, kết nối giữa module cùng đối tượng người sử dụng biểu lộ sự phụ thuộc. Sau đây là bảng tổng quan liêu phương pháp sử dụnganotate vào dagger :Table 1. Annotation summary of Dagger 2

AnnotationUsage

Component
Used on an interface. This interface is used by Dagger 2 to lớn generate code which uses the modules khổng lồ fulfill the requested dependencies.

Note: Dagger không auto inject những fields. Nó cũng thiết yếu inject các private fields, nếu bạn muốn thực hiện inject field, các bạn sẽ define 1 method vào
Component interface trong các số ấy mang instance mà lại bạn có nhu cầu inject làm tham số.

Kết luận

Qua nội dung bài viết này hi vọng toàn bộ các bạn có thể tưởng tượng qua tư tưởng về Dependency injection,để trường đoản cú kia có tầm nhìn mang đến Dagger 2, lịch sự bài xích tiếp theo bản thân sẽ triển không giống các bước nhằm inject dagger vào 1 project nhỏ app android. Ở nội dung bài viết này mình đã cố gắng tìm hiểu thêm từ nhiều nguồn tuy vậy lượng kiến thức có hạn ước ao cảm nhận sự đóng góp của chúng ta.Cảm ơn đều người !

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *