Dagger là gì

Giới thiệu

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

*

Chuẩn bị

Trước khi bắt đầu bạn muốn chúng ta tò mò qua về SOLID principles sẽ là những nguyên tắc thi công và viết code. Sau đó ở đây mình đang chỉ nhấn mạnh nguyên tắc ở đầu cuối SOLID kia chính 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 thấp cấp. Cả 2 yêu cầu dựa vào vào abstraction.2. Interface (abstraction) tránh việc dựa vào vào cụ thể, mà ngược lại. ( Các class giao tiếp với nhau thông qua interface, không hẳn trải qua implementation.)Với cách code thường thì, những module cao cấp sẽ Gọi những module thấp cấp. Module V.I.P đã phụ thuộc vào với module thấp cấp, điều này tạo thành các dependency. lúc module cấp thấp đổi khác, module cao cấp phải đổi khác theo. Một chuyển đổi đang kéo theo 1 loạt biến hóa, bớt kỹ năng gia hạn của code.Chính vày vậy nêú tuân theo Dependendy Inversion principle, các module thuộc phụ thuộc vào 1 interface ko thay đổi. Ta hoàn toàn có thể thuận tiện thay thế sửa chữa, sửa thay đổi module thấp cấp nhưng không tác động gì cho tới module cao cấp.

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

Định nghĩa và định nghĩa DI

Hiện nay, những xây dựng viên hay lẫn lộn giữa những tư tưởng Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba khái niệm này tựa như nhau mà lại không trọn vẹn giống như nhau.

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

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

Xem thêm: Cách Xào Thịt Heo Ngon Và Đơn Giản Nhất, Cách Làm Thịt Lợn Xào Sả Ớt Ngon Và Đơn Giản Nhất

cũng có thể đọc Dependency Injection một bí quyết dễ dàng nhỏng sau:

Các module ko tiếp xúc thẳng với nhau, nhưng mà thông qua interface. Module thấp cấp vẫn implement interface, module V.I.P vẫn Điện thoại tư vấn module thấp cấp trải qua interface.

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

Dependency Injection with Dagger 2

Dagger 2 là gì ?

Là một dependency injector, khác với những dependency injector dành riêng cho bài toán thực thi áp dụng Enterprise nlỗi Spring IoC giỏi JavaEE CDI. Dagger Được xây cất cho những đồ vật low-kết thúc, nhỏ tuổi gọn nhưng mà vẫn khá đầy đủ tuấn kiệt.Hầu không còn các dependency injector áp dụng reflection nhằm tạo ra với inject các module. Reflection nhanh khô cùng phù hợp cho các version Android cũ tuy thế reflection gây nên trở ngại không nhỏ vào bài toán debug giỏi tracking Khi gặp gỡ lỗi.Thay bằng Việc sử dụng reflection Dagger áp dụng một trình biên dịch trước (pre-compiler), trình biên dịch này tạo nên tất cả các lớp, các module quan trọng để gia công vấn đề.Dagger không nhiều mạnh bạo đối với các dependency injector khác tuy thế cầm cố vào đó Dagger lại dìu dịu cùng thuận tiện thực hiện cũng giống như gần như loại bỏ được nhược điểm của dependency injector là khả 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 có trách nát nhiệm hỗ trợ những object có thể được inject.Các class như thế hoàn toàn có thể tư tưởng những cách thức cùng với anotated
Provides. Các đối tượng người dùng trả về từ những thủ tục này còn có sẵn dependency nhằm inject.Định nghĩa dependency (object consumers) Bạn rất có thể thực hiện
Inject cùng với constructor,Dagger 2 có thể thực hiện 1 instance này để xong dependencies.Vấn đề này được tiến hành để tránh Việc define các phương thức
Component được áp dụng trong một interface.Interface này được thực hiện bởi Dagger2 nhằm mục đích generate code, liên kết giữa module cùng đối tượng người tiêu dùng miêu tả sự phụ thuộc. Sau đấy là bảng tổng quan tiền cách 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 generate code which uses the modules to lớn fulfill the requested dependencies.

Xem thêm: Thưởng Thức Món Gà Không Lối Thoát Theo Chuẩn Hà Nội, Cách Làm Món Gà Không Lối Thoát Theo Chuẩn Hà Nội

Note: Dagger không tự động hóa inject những fields. Nó cũng bắt buộc inject các private fields, ví như bạn có nhu cầu thực hiện inject field, bạn sẽ define 1 method vào
Component interface trong số đó lấy instance mà lại bạn có nhu cầu inject làm tmê mẩn số.

Kết luận

Qua bài viết này hi vọng tất cả các bạn có thể tưởng tượng qua bốn tưởng về Dependency injection,để tự kia có tầm nhìn cho Dagger 2, sang bài bác tiếp theo sau bản thân đang triển không giống quá trình nhằm inject dagger vào 1 project nhỏ game android. Tại bài viết này tôi đã cố gắng tìm hiểu thêm từ khá nhiều mối cung cấp dẫu vậy lượng kỹ năng có hạn mong nhận ra sự góp sức của các bạn.Cảm ơn phần nhiều tín đồ !


Chuyên mục: ĐỊNH NGHĨA