Dagger 2 cho người mới bắt đầu

Giới thiệu

Dagger 2 - là một trong những dependency injection framework. Nó được sử dụng nhằm genaration code trải qua những base anotation, code được genartion ra rất đơn giản phát âm với debug

*

Chuẩn bị

Trước lúc ban đầu bạn muốn các bạn khám phá qua về SOLID principles chính là rất nhiều nguyên tắc thiết kế với viết code. Sau đó tại chỗ này mình sẽ chỉ nhấn mạnh vấn đề nguyên lý sau cuối SOLID kia đó là Dependency Inversion:

Dependency inversion principle

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

Bạn đang xem: Dagger 2 cho người mới bắt đầu

Định nghĩa cùng tư tưởng DI

Lúc này, các lập trình sẵn viên giỏi lộn lạo thân những định nghĩa Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba có mang này tương tự như nhau nhưng không trọn vẹn kiểu như nhau.

*
Sự khác hoàn toàn giữa 3 khái niệm trên:

Dependency Inversion: Đây là 1 trong những nguyên lý để thiết kế với viết code.Inversion of Control: Đây là 1 trong kiến thiết pattern được tạo nên nhằm code rất có thể vâng lệnh nguyên tắc Dependency Inversion. Có vô số phương pháp thực tại pattern này: ServiceLocator, Event, Delegate, … Dependency Injection là 1 trong trong những bí quyết đó.Dependency Injection: Đây là một trong những phương pháp để hiện thực Inversion of Control Pattern (Có thể coi nó là 1 trong những thiết kế pattern riêng biệt cũng được). Các module phụ thuộc (dependency) sẽ được inject vào module cao cấp.

Xem thêm: Chiến Thần Xích Bích Lâm Vào Cảnh Vườn Không Nhà Trống, Chiến Thần Xích Bích

cũng có thể phát âm Dependency Injection một phương pháp dễ dàng và đơn giản như sau:

Các module ko giao tiếp trực tiếp cùng nhau, cơ mà trải qua interface. Module cấp thấp đang implement interface, module V.I.P đang call module cấp thấp thông qua interface.

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

Dependency Injection with Dagger 2

Dagger 2 là gì ?

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

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

Trong Dagger 2 class gồm anotation
Module bao gồm trách nhiệm cung cấp những object rất có thể được inject.Các class như thế có thể quan niệm những cách thức cùng với anotated
Provides. Các đối tượng trả về từ các cách tiến hành này có sẵn dependency nhằm inject.Định nghĩa dependency (object consumers) quý khách hoàn toàn có thể thực hiện
Inject với constructor,Dagger 2 rất có thể thực hiện 1 instance này để xong xuôi dependencies.Như vậy được thực hiện để rời vấn đề define những phương thức
Component được thực hiện trong 1 interface.Interface này được áp dụng vì chưng Dagger2 nhằm generate code, liên kết thân module và đối tượng người dùng thể hiện sự phụ thuộc vào. Sau đó là bảng tổng quan lại bí quyết sử dụnganotate trong 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 ko tự động hóa inject các fields. Nó cũng cần thiết inject các private fields, nếu bạn có nhu cầu thực hiện inject field, các bạn sẽ define 1 method trong
Component interface trong những số ấy lấy instance nhưng mà bạn có nhu cầu inject làm cho tmê say số.

Kết luận

Qua bài viết này mong muốn tất cả các bạn có thể hình dung qua tứ tưởng về Dependency injection,nhằm trường đoản cú kia gồm cái nhìn mang lại Dagger 2, lịch sự bài xích tiếp sau bản thân sẽ triển không giống quá trình nhằm inject dagger vào 1 project bé dại apk. Ở bài viết này mình đã nỗ lực xem thêm từ khá nhiều nguồn mà lại lượng kiến thức có hạn ý muốn nhận thấy sự góp sức của chúng ta.Cảm ơn phần lớn fan !