2015-07-11 22 views
20

Ưu điểm của Dagger 2 trên Dagger 1 là gì?Phun phụ thuộc Java: Dagger 1 vs Dagger 2, tốt hơn?

Cho đến nay tôi tìm thấy (chỉ) 2:

  • Dagger 2 cho phép bạn sử dụng mã obfuscation với Proguard
  • Dagger 2 là nhanh hơn (mà không phải là nhiều của một lợi thế khi sử dụng nó cho các ứng dụng android nhưng nó chắc chắn là một điều quan trọng nếu bạn sử dụng nó cho một số loại máy chủ)

trong cùng thời gian tôi thấy một nhược điểm lớn: bạn không thể có ghi đè mô-đun (@Module(overrides = true)) trong Dagger 2, trong đó phần lớn là gây phiền nhiễu tại ít nhất đối với tôi - nó rất là u seful cho thử nghiệm đơn vị.

Có những ưu điểm/nhược điểm nào khác không?

+1

* Không hỏi về: Các khuyến nghị hoặc so sánh sản phẩm hoặc dịch vụ * – Selvin

+0

Bạn đã hỏi một câu hỏi về similare tại đây: http://stackoverflow.com/questions/31354735/how-to-migrate-missing-inject-from-module -with-complete-false-from-dagger-1-to. Tôi nghĩ bài đăng này phải là bản chỉnh sửa cho bài đăng đó, –

+4

@Selvin Câu hỏi như thế này đôi khi có giá trị lớn đối với cộng đồng vì họ thu hút sự chú ý đến một vấn đề phổ biến như "Dagger DI để chọn và tại sao?". Tôi xin lỗi vì vi phạm quy tắc bạn trích dẫn nhưng cũng có "Một số câu hỏi chủ quan được cho phép", "Tất cả các câu hỏi chủ quan được dự kiến ​​sẽ mang tính xây dựng". Nếu nhận xét của bạn nhận được nhiều phiếu bầu hơn số phiếu hiện tại - tôi sẽ xóa câu hỏi. – Ognyan

Trả lời

15

Một số ưu điểm và nhược điểm lấy từ https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/http://google.github.io/dagger/dagger-1-migration.html:

Ưu điểm của Dagger 2:

  • Không còn phản ánh - tất cả mọi thứ được thực hiện như các cuộc gọi bê tông (ProGuard làm việc không cần cấu hình gì cả)
  • Không còn thành phần biểu đồ thời gian chạy - cải thiện hiệu suất, bao gồm các trường hợp theo yêu cầu
  • Có thể theo dõi - mã được tạo tốt hơn và không có phản ánh giúp làm cho mã r eadable và dễ dàng để làm theo
  • Hỗ trợ phương pháp tiêm ngoài hiện trường và tiêm constructor mà là hai loại chỉ được hỗ trợ bởi Dagger 1
  • Modules đòi hỏi ít cấu hình hơn Dagger 1
  • Cho phép người dùng sử dụng bất kỳ phạm vi cũng như hình thành chú thích. Dagger 1 chỉ hỗ trợ một phạm vi duy nhất: @Singleton.

Và nhược điểm:

  • Phương pháp inject() bây giờ có một loại liên kết mạnh mẽ với mục tiêu tiêm. Điều này là tốt để gỡ lỗi, nhưng nó làm phức tạp một thực tế phổ biến của tiêm từ các lớp cơ sở (ví dụ như các hoạt động cơ sở, các mảnh vv).
  • Việc triển khai thành phần yêu cầu xây dựng lại dự án để xuất hiện và bất kỳ lỗi biên dịch liên quan đến tiêm nào dẫn đến lớp biến mất (tức là không được tạo).
  • Không hỗ trợ overrides. Các mô-đun ghi đè cho các lần kiểm tra đơn giản có thể tạo ra một phân lớp của mô-đun để mô phỏng hành vi đó. Các mô-đun sử dụng ghi đè và dựa vào tiêm phụ thuộc nên được phân tích sao cho các mô-đun được ghi đè thay vào đó được biểu diễn như một sự lựa chọn giữa hai mô-đun.

EDIT 2016/11/16: Đây không phải là một lợi thế kỹ thuật, nhưng Dagger 1 hiện đang bị phản đối (tính đến ngày 15 tháng 9 2016) và sẽ không còn được phát triển tích cực. Họ khuyên bạn nên di chuyển sang Dagger 2.

+0

Tôi không thể tìm thấy nguồn thông tin nữa, nhưng D2 được cho là nhanh hơn 17% so với D1 .. – Snicolas

+0

@Ognyan có trả lời được câu hỏi của bạn không? hãy xem xét chấp nhận nó nếu có! Cảm ơn bạn! – snafu109

2

Tôi sẽ không khuyên bạn nên xem toothpick.

Là một đồng tác giả, tôi rõ ràng là quá thiên vị, nhưng vâng cái này là đơn giản hơn nhiều để sử dụng, ít nhất là nhanh chóng trong hầu hết các trường hợp so với các dao găm. Và thực sự cây phạm vi là một cách rất mạnh mẽ để phát triển các tính năng nâng cao hơn như các trường hợp tái chế trong các phạm vi trải rộng trên nhiều hoạt động.

+0

Bạn sẽ không? Vâng tôi sẽ khuyên bạn nên Tăm - Tôi đã sử dụng Dagger 2 nhiều hơn, nhưng thư viện này đã không gây ra cho tôi bất kỳ rắc rối nào được nêu ra. – npace

Các vấn đề liên quan