Dagger Là Gì

  -  
Giới thiệu

Dagger 2 - là một trong dependency injection framework. Nó được thực hiện để genaration code thông qua những base anotation, code được genartion ra rất giản đơn hiểu với debug

*

Chuẩn bị

Trước Khi bước đầu mình muốn các bạn tìm hiểu qua về SOLID principles đó là các nguyên lý xây dựng với viết code. Sau kia tại đây mình đang chỉ nhấn mạnh vấn đề nguyên tắc ở đầu cuối SOLID đó chính là Dependency Inversion:

Dependency inversion principle

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

Định nghĩa cùng định nghĩa DIHiện nay, các xây dựng viên giỏi lẫn lộn thân các khái niệm Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba quan niệm này tựa như nhau nhưng mà không trọn vẹn giống nhau.

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


*

Sự khác biệt thân 3 tư tưởng trên:

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

Có thể gọi Dependency Injection một phương pháp đơn giản dễ dàng nlỗi sau:

Các module không giao tiếp thẳng cùng nhau, mà lại trải qua interface. Module thấp cấp sẽ implement interface, module cấp cao vẫn call module cấp thấp thông qua interface.

Xem thêm: Danh SáCh Chi NháNh NgâN HàNg Hsbc Điện Biên Phủ

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

Dependency Injection with Dagger 2

Dagger 2 là gì ?

Là một dependency injector, không giống cùng với những dependency injector giành riêng cho vấn đề thực hiện ứng dụng Enterprise nlỗi Spring IoC giỏi JavaEE CDI. Dagger Được thi công cho các vật dụng low-over, nhỏ dại gọn tuy nhiên vẫn không hề thiếu tuấn kiệt.Hầu không còn những dependency injector áp dụng reflection nhằm tạo thành với inject những module. Reflection nhanh với phù hợp cho các version Android cũ nhưng mà reflection gây nên khó khăn không nhỏ vào vấn đề debug tuyệt tracking Lúc gặp gỡ lỗi.Tgiỏi bởi Việc áp 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 Việc.Dagger không nhiều trẻ khỏe so với các dependency injector khác nhưng mà nắm vào đó Dagger lại nhẹ nhàng cùng dễ dàng áp dụng tương tự như gần như bỏ đi được nhược điểm của dependency injector là năng lực tracking bugDagger 2 áp dụng đa số các anotation sau :

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

Trong Dagger 2 class bao gồm anotation Module bao gồm trách rưới nhiệm cung ứng những object rất có thể được inject.Các class như thế hoàn toàn có thể định nghĩa những phương thức với anotated Provides. Các đối tượng người tiêu dùng trả về từ những cách tiến hành này có sẵn dependency để inject.Định nghĩa dependency (object consumers) quý khách rất có thể thực hiện Inject cùng với constructor,Dagger 2 hoàn toàn có thể sử dụng 1 instance này nhằm ngừng dependencies.Vấn đề này được thực hiện nhằm rời vấn đề define nhiều cách 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 giữa module và đối tượng biểu đạt sự nhờ vào. Sau đó là bảng tổng quan lại biện pháp sử dụnganotate vào dagger :Table 1. Annotation summary of Dagger 2

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

Xem thêm: Nằm Mơ Thấy Con Chó Đánh Con Gì ? Nằm Mơ Thấy Chó Đánh Con Gì

Note: Dagger không tự động hóa inject những fields. Nó cũng cần yếu inject những private fields, giả dụ bạn muốn sử dụng inject field, các bạn sẽ define 1 method vào Component interface trong những số ấy lấy instance mà bạn có nhu cầu inject làm tsay đắm số.

Kết luận

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