在專案中怎麼靈活使用Dagger

2021-09-30 19:36:38 字數 2139 閱讀 1486

最近介紹dagger的文章挺多的,大多介紹的都是用法和註解的意義,在附帶乙個小demo,把剛學習的開發者看的雲裡霧裡的,看完還是不知道怎麼結合在專案中使用?什麼時候在專案中用?在專案中的使用場景是什麼?

這是本人寫的mvp+dagger框架mvparms的架構圖,通過dagger來為mvp提供所需要的一切類和介面,本框架的初衷是讓開發者更好的學習及使用此類開發模式,如果不理解為什麼要使用mvp+dagger來開發專案,可以先看這篇文章

之前我看了幾個使用mvp+dagger+retrofit開發,並且有一定star量的開源專案,所以對比了下我的框架,有以下幾點:

使用dagger的場景太少了,大部分只是使用dagger注入mvp類,並且有些retrofit都是自己new,並沒有使用dagger管理,甚至有些使用一次介面就retrofit.create(apiservice.class)一次,這個本可以使用dagger將它作為單例來呼叫的

有一些設計的componentmodule完全只是用來注入activity和一些單例

@activityscope

public inte***ce activitycomponent

只要多乙個activity,他就可以一直過載inject方法,於是就可以用一組component,module來為所有activity注入,但是如果遇到activity需要臨時注入一些其他的元件,並且每個activity要注入的元件都不一樣,就沒辦法了,缺少靈活性

還是和第2條有關,如果只有乙個module,dagger就無法根據每個presenter的需要,提供多個不同的model,比如這個presenter使用過這個介面,並且快取已經在model中寫好,其他presenter如果也要用到這個介面,就可以直接重用這個model,mvp最大的好處之一就是可以重用mp

有些沒有model層,直接給presenter注入retrofit api(有些是注入乙個管理類,如果專案小介面少,這樣還不錯,但是有沒有想過專案一大,介面一多裡面就非常混亂),所有網路請求邏輯在presenter中,如果現在需求變了,需要加入快取,就需要更改presenter的邏輯,這樣就可能影響一些和這個功能無關的邏輯,如果有model層,裡面持有請求網路和快取的功能類,這樣presenter就不需要管,資料是從網路還是資料庫獲取的,model層只用保證返回給presenter的資料無誤,而presenter只用專注於邏輯,這樣各自只用保證各自的職責,遮蔽細節,易擴充套件,出錯也好定位

在專案中用到最多的就是向presenter提供viewmodel的同時,在向每一層提供所需要的單例類,並且使用dagger不斷的重用presentermodel,其實dagger本來就抽象,說再多不如直接看**是怎麼實現的,然後照著模版直接在自己專案中使用,本文的主題不就是在專案中怎麼靈活使用dagger嗎?那就直接在專案中找答案不是更快?

Ibatis在專案中怎麼使用的

spring中配置 oracle.jdbc.driver.oracledriver authority authority 使用 在firmservice中定義firmdao屬性並有方法 public organization getorgbyid int id throws exception c...

Promise在vue專案中快速靈活的應用

博主個人部落格 promise和ajax功能類似,都是用來做非同步請求的。promise的優勢在於可以鏈式程式設計,在response還沒回應時,then操作中可以把正常流程 實現,catch捕獲異常 而且可以放在最後進行統一捕獲 可以不斷then 下去 前後端分離大背景下,ajax是基於原生的xh...

在專案中使用ExtJS

今天extjs官網發布了extjs最新正式版4.2.1。extjs為開發者在開發富客戶的b s應用中提供豐富的ui元件,具有統一的主題,便於快速開發,提高效率。但顯然它並不適合互聯 的開發。builds 壓縮後的extjs 體積更小,更快 docs 開發文件 examples 官方演示示例 loca...