dagger 2 la gi

Đã đăng nhập thg 8 7, 2018 7:15 SA

4 phút đọc

Bạn đang xem: dagger 2 la gi

Giới thiệu

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

Chuẩn bị

Trước khi chính thức mình thích chúng ta mò mẫm hiểu qua quýt về SOLID principles này đó là những nguyên tắc kiến thiết và ghi chép code. Sau bại ở trên đây bản thân tiếp tục chỉ nhấn mạnh vấn đề nguyên tắc sau cùng SOLID bại đó là Dependency Inversion:

Dependency inversion principle

1. Các module cấp cho cao tránh việc tùy thuộc vào những modules thấp cấp. Cả 2 nên tùy thuộc vào abstraction.
2. Interface (abstraction) tránh việc tùy thuộc vào cụ thể, mà hoàn toàn trái ngược. 
( Các class tiếp xúc cùng nhau trải qua interface, ko cần trải qua implementation.)
  • Với cơ hội code thường thì, những module cấp cho cao tiếp tục gọi những module thấp cấp. Module cấp cho cao tiếp tục dựa vào và module thấp cấp, điều này tạo nên những dependency. Khi module thấp cấp thay cho thay đổi, module cấp cho cao cần thay cho thay đổi theo đuổi. Một thay cho thay đổi tiếp tục kéo theo đuổi một loạt thay cho thay đổi, rời kỹ năng duy trì của code.
  • Chính chính vì thế nêú tuân theo đuổi Dependendy Inversion principle, những module nằm trong tùy thuộc vào 1 interface ko thay đổi. Ta hoàn toàn có thể dễ dàng và đơn giản thay cho thế, sửa thay đổi module thấp cấp tuy nhiên ko tác động gì cho tới module cấp cho cao.

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

  • Hiện ni, những lập trình sẵn viên hoặc lộn lạo trong số những định nghĩa Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba định nghĩa này tương tự động nhau tuy nhiên ko trọn vẹn như là nhau.

Sự khác lạ thân thích 3 định nghĩa trên:

  • Dependency Inversion: Đây là một trong những nguyên tắc nhằm kiến thiết và ghi chép code.
  • Inversion of Control: Đây là một trong những design pattern được tạo nên nhằm code hoàn toàn có thể vâng lệnh nguyên tắc Dependency Inversion. Có vô số phương pháp thực tế pattern này: ServiceLocator, Event, Delegate, … Dependency Injection là một trong những trong số cơ hội đó.
  • Dependency Injection: Đây là một trong những phương pháp để thực tế Inversion of Control Pattern (Có thể coi nó là một trong những design pattern riêng rẽ cũng được). Các module dựa vào (dependency) sẽ tiến hành inject nhập module cấp cho cao.

Có thể hiểu Dependency Injection một cơ hội giản dị và đơn giản như sau:

Xem thêm: gb to mb

  • Các module ko tiếp xúc thẳng cùng nhau, tuy nhiên trải qua interface. Module thấp cấp tiếp tục implement interface, module cấp cho cao tiếp tục gọi module thấp cấp trải qua interface.
     Ví dụ: Để tiếp xúc với database, tớ với interface IDatabase, những module thấp cấp là
     XMLDatabase, SQLDatabase.Module cấp cho cao là CustomerBusiness tiếp tục chỉ dùng interface IDatabase.
  • Việc khởi tạo ra những module thấp cấp tiếp tục vì thế DI Container tiến hành.
     Ví dụ: Trong module CustomerBusiness, tớ sẽ không còn khởi tạo ra IDatabase db = new XMLDatabase(), 
     việc này tiếp tục vì thế DI Container tiến hành. Module CustomerBusiness sẽ không còn biết gì về 
     module XMLDatabase hoặc SQLDatabase.
  • Việc Module nào là gắn kèm với interface nào là sẽ tiến hành config nhập code hoặc nhập tệp tin XML.
  • DI được dùng làm thực hiện rời sự dựa vào trong số những module, dễ dàng và đơn giản rộng lớn trong công việc thay cho thay đổi module, duy trì code và testing.

Dependency Injection with Dagger 2

  1. Dagger 2 là gì ?

    • Là một dependency injector, không giống với những dependency injector giành cho việc xây dựng phần mềm Enterprise như Spring IoC hoặc JavaEE CDI. Dagger Được kiến thiết cho những vũ khí low-end, không lịch kịch vẫn không thiếu thốn tác dụng.
    • Hầu không còn những dependency injector dùng reflection muốn tạo đi ra và inject những module. Reflection nhanh chóng và phù hợp cho những version Android cũ tuy nhiên reflection tạo nên trở ngại rất rộng lớn trong công việc debug hoặc tracking khi bắt gặp lỗi.
    • Thay bằng sự việc dùng reflection Dagger 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 toàn bộ những lớp, những module quan trọng nhằm thao tác làm việc.
    • Dagger không nhiều mạnh mẽ và tự tin đối với những dependency injector không giống tuy nhiên thay cho nhập bại Dagger lại nhẹ dịu và dễ dàng và đơn giản dùng tương đương gần như là vứt đi được nhược điểm của dependency injector là kỹ năng tracking bug
    • Dagger 2 dùng hầu hết những anotation sau :
      • @Module & @Provides: Sử dụng nhằm khái niệm class và method cần thiết hỗ trợ sự dựa vào.
      • @Inject : request 1 dependencies. cũng có thể dùng với cùng một constructor , 1 field hoặc 1 method.
      • @Component:Nó là một interface dùng làm thực hiện cầu nối thân thích module và injection .
  2. Định nghĩa dependency providers (object providers)

Trong Dagger 2 class với anotation @Module với trách cứ nhiệm hỗ trợ những object hoàn toàn có thể được inject.
Các class như thế hoàn toàn có thể khái niệm những cách thức với anotated @Provides. Các đối tượng người tiêu dùng trả về kể từ những 
phương thức này còn có sẵn dependency nhằm inject.
  1. Định nghĩa dependency (object consumers)
 Quý khách hàng hoàn toàn có thể dùng @Inject nhằm khái niệm dependency.Nếu chúng ta bịa @Inject với constructor,Dagger 2 hoàn toàn có thể 
 dùng 1 instance này nhằm hoàn thiện dependencies.Vấn đề này được tiến hành nhằm rời việc define nhiều cách thức 
 @Provider cho những đối tượng người tiêu dùng này.
  1. Kết nối thân thích consumers và providers
@Component được dùng trong một interface.Interface này được dùng vị Dagger2 nhằm mục tiêu generate code, 
kết nối thân thích module và đối tượng người tiêu dùng thể hiện nay sự dựa vào. Sau đấy là bảng tổng quan tiền cơ hội sử dụng
anotate nhập dagger :

Table 1. Annotation summary of Dagger 2

Annotation Usage
@Module Used on classes which contains methods annotated with @Provides.
@Provides Can be used on methods in classes annotated with @Module and is used for methods which provides objects for dependencies injection.
@Singleton Single instance of this provided object is created and shared.
@Component Used on an interface. This interface is used by Dagger 2 vĩ đại generate code which uses the modules vĩ đại fulfill the requested dependencies.

Note: Dagger ko tự động hóa inject những fields. Nó cũng ko thể inject những private fields, nếu như bạn thích dùng inject field, các bạn sẽ define 1 method nhập @Component interface nhập bại lấy instance tuy nhiên bạn thích inject thực hiện thông số.

Xem thêm: lão gia là gì

Kết luận

Qua nội dung bài viết này kỳ vọng toàn bộ những bạn cũng có thể tưởng tượng qua quýt tư tưởng về Dependency injection,nhằm kể từ bại với tầm nhìn cho tới Dagger 2, lịch sự bài bác tiếp sau bản thân tiếp tục triển không giống quá trình nhằm inject dagger nhập 1 project nhỏ app android. Tại nội dung bài viết này tôi đã nỗ lực xem thêm từ khá nhiều mối cung cấp tuy nhiên lượng kỹ năng và kiến thức hạn chế hy vọng sẽ có được sự góp phần của chúng ta. Cảm ơn quý khách !

Nguồn :

  • http://www.vogella.com/tutorials/Dagger/article.html#defining-dependencies-object-consumers
  • https://proandroiddev.com/how-to-dagger-2-with-android-part-1-18b5b941453f

All rights reserved