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

Bài viết Dagger 2 cho người mới bắt đầu thuộc chủ đề về Câu Hỏi- Giải Đáp đang được rất nhiều bạn lưu tâm đúng không nào !! Hôm nay, Hãy cùng https://sotaythongthai.vn/ tìm hiểu Dagger 2 cho người mới bắt đầu trong bài viết hôm nay nha !

Các bạn đang xem nội dung : “Dagger 2 cho người mới bắt đầu”


Giới thiệu

Dagger 2 – là một dependency injection framework. Nó được dùng để genaration code thông qua các base anotation, code được genartion ra rất dễ đọc và debug

Chuẩn bị

Trước khi bắt đầu mình muốn các bạn tìm hiểu qua về SOLID principles đó là những nguyên lý thiết kế và viết code. Sau đó ở đây mình sẽ chỉ nhấn mạnh nguyên lý cuối cùng SOLID đó chính là Dependency Inversion:

Bạn đang xem: dagger la gi

Dependency inversion principle

1. Các module cấp cao nhớ đừng nên phụ thuộc vào các modules cấp thấp. Cả 2 nên phụ thuộc vào abstraction. 2. Interface (abstraction) nhớ đừng nên phụ thuộc vào chi tiết, mà ngược lại. ( Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation.)

  • Với cách code thông thường, các module cấp cao sẽ gọi các module cấp thấp. Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra các dependency. Khi module cấp thấp thay đổi ngay, module cấp cao phải thay đổi ngay theo. Một thay đổi ngay sẽ kéo theo hàng loạt thay đổi ngay, giảm khả năng bảo trì của code.
  • chính vì thế nêú tuân theo Dependendy Inversion principle, các module cùng phụ thuộc vào 1 interface không đổi. Ta khả năng đơn giản thay thế, sửa đổi module cấp thấp mà không tác động gì tới module cấp cao.

Định nghĩa và khái niệm DI

  • Hiện nay, các lập trình viên hay lẫn lộn giữa các khái niệm Dependency Inversion, Inversion of Control (IoC), Dependency Injection (DI). Ba khái niệm này tương tự nhau nhưng không hoàn toàn giống nhau.

Xem thêm: Nhận xét flowchart là gì | Sen Tây Hồ

Sự khác biệt giữa 3 khái niệm trên:

  • Dependency Inversion: Đây là một nguyên lý để thiết kế và viết code.
  • Inversion of Control: Đây là một design pattern được tạo ra để code khả năng tuân thủ nguyên lý Dependency Inversion. Có nhiều cách hiện thực pattern này: ServiceLocator, Event, Delegate, … Dependency Injection là một trong các cách đó.
  • Dependency Injection: Đây là một cách để hiện thực Inversion of Control Pattern (khả năng coi nó là một design pattern riêng cũng được). Các module phụ thuộc (dependency) sẽ được inject vào module cấp cao.

khả năng hiểu Dependency Injection một cách đơn giản như sau:

  • Các module không giao tiếp trực tiếp với nhau, mà thông qua interface. Module cấp thấp sẽ implement interface, module cấp cao sẽ gọi module cấp thấp thông qua interface.

Ví dụ: Để giao tiếp với database, ta có interface IDatabase, các module cấp thấp là XMLDatabase, sentayho.com.vn cấp cao là CustomerBusiness sẽ chỉ dùng interface IDatabase.

  • Việc khởi tạo các module cấp thấp sẽ do DI Container thực hiện.

Ví dụ: Trong module CustomerBusiness, ta sẽ không khởi tạo IDatabase db = new XMLDatabase(), việc này sẽ do DI Container thực hiện. Module CustomerBusiness sẽ không biết gì về module XMLDatabase hay SQLDatabase.

  • Việc Module nào gắn với interface nào sẽ được config trong code hoặc trong file XML.
  • DI được dùng để làm sụt giảm sự phụ thuộc giữa các module, đơn giản hơn trong việc thay đổi ngay module, bảo trì code và testing.

Dependency Injection with Dagger 2

  1. Dagger 2 là gì ?

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

Trong Dagger 2 class có anotation @Module có trách nhiệm cung cấp các object khả năng được inject. Các class như vậy khả năng định nghĩa các phương thức với anotated @Provides. Các đối tượng trả về từ các phương thức này có sẵn dependency để inject.

  1. Định nghĩa dependency (object consumers)

Bạn khả năng dùng @Inject để định nghĩa dependency.Nếu bạn đặt @Inject với constructor,Dagger 2 khả năng dùng 1 instance này để hoàn thành dependencies.Điều này được thực hiện để tránh việc define nhiều phương thức @Provider cho các đối tượng này.

  1. Kết nối giữa consumers và providers

@Component được dùng trong 1 sentayho.com.vnrface này được dùng bởi Dagger2 nhằm generate code, kết nối giữa module và đối tượng thể hiện sự phụ thuộc. Sau đây là bảng tổng quan cách dùng anotate trong dagger :

Xem thêm: Phân tích handoff là gì | Sen Tây Hồ

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 to generate code which uses the modules to fulfill the requested dependencies.

Note: Dagger không tự động inject các fields. Nó cũng không thể inject các private fields, nếu bạn muốn dùng inject field, bạn sẽ define 1 method trong @Component interface trong đó lấy instance mà bạn muốn inject làm tham số.

Kết luận

Qua bài viết này hy vọng tất cả các bạn khả năng hình dung qua tư tưởng về Dependency injection,để từ đó có cái nhìn đến Dagger 2, sang bài tiếp theo mình sẽ triển khác các bước để inject dagger vào 1 project nhỏ android. Ở bài viết này mình đã cố gắng tham khảo từ nhiều nguồn nhưng lượng kiến thức có hạn mong nhận được sự đóng góp của các bạn. Cảm ơn mọi người !

Nguồn :

Tham khảo thêm: “Tàu Điện Ngầm” trong Tiếng Anh là gì: Định Nghĩa, Ví Dụ Anh Việt

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

Bạn thấy bài viết thế nào?

Các câu hỏi về Dagger 2 cho người mới bắt đầu

Team Sổ Tay Thông Thái mà chi tiết là Mỹ Chi đã biên soạn bài viết dựa trên tư liệu sẵn có và kiến thức từ Internet. Dĩ nhiên tụi mình biết có nhiều câu hỏi và nội dung chưa thỏa mãn được bắt buộc của các bạn.

Thế nhưng với tinh thần tiếp thu và nâng cao hơn, Mình luôn đón nhận tất cả các ý kiến khen chê từ các bạn & Quý đọc giả cho bài viêt Dagger 2 cho người mới bắt đầu

Nếu có bắt kỳ câu hỏi thắc mắt nào vê Dagger 2 cho người mới bắt đầu hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha <3 Chốt lại nhen <3 Bài viết Dagger 2 cho người mới bắt đầu ! được mình và team xem xét cũng như tổng hợp từ nhiều nguồn. Nếu thấy bài viết Dagger 2 cho người mới bắt đầu Cực hay ! Hay thì hãy ủng hộ team Like hoặc share. Nếu thấy bài viết Dagger 2 cho người mới bắt đầu rât hay ! chưa hay, hoặc cần bổ sung. Bạn góp ý giúp mình nha!!

Các Hình Ảnh Về Dagger 2 cho người mới bắt đầu

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

Các từ khóa tìm kiếm cho bài viết #Dagger #cho #người #mới #bắt #đầu

Tra cứu tin tức về Dagger 2 cho người mới bắt đầu tại WikiPedia

Bạn nên tìm thêm nội dung về Dagger 2 cho người mới bắt đầu từ web Wikipedia tiếng Việt.◄

Tham Gia Cộng Đồng Tại

💝 Nguồn Tin tại: https://sotaythongthai.vn/

💝 Xem Thêm Hỏi đáp thắc mắt tại : https://mangraovat.edu.vn/hoi-dap/

Related Posts

About The Author

Add Comment