推薦:看到如此多的 MVP+Dagger2+Retrofit+Rxjava 項目, 輕松拿 star, 心動了嗎? 看到身邊的朋友都已早早在項目中使用這些技術(shù), 而你還不會, 失落嗎? MVPArms 是一個 MVP+Dagger2+Retrofit+Rxjava 可配置化快速集成框架(目前 Dagger 應(yīng)用最復(fù)雜可配置化極強的集成框架), 自帶上萬字 文檔 以及 一鍵生成 MVP 和 Dagger2 文件等功能, 成熟穩(wěn)定且已有上千個商業(yè)項目接入, 累計 5k+ star(全球第一 MVP 框架), 現(xiàn)在你只用專注于邏輯, 其他都交給 MVPArms, 快來構(gòu)建自己的 MVP+Dagger2+Retrofit+Rxjava 項目吧! |
---|
原文地址: http://www.reibang.com/p/6a2c15a0c2b5
前言
最近介紹Dagger的文章挺多的,大多介紹的都是用法和注解的意義,在附帶一個小Demo,把剛學(xué)習(xí)的開發(fā)者看的云里霧里的,看完還是不知道怎么結(jié)合在項目中使用?什么時候在項目中用?在項目中的使用場景是什么?
架構(gòu)圖
這是本人寫的MVP+Dagger框架MVPArms的架構(gòu)圖,通過Dagger
來為MVP
提供所需要的一切類和接口,本框架的初衷是讓開發(fā)者更好的學(xué)習(xí)及使用此類開發(fā)模式,如果不理解為什么要使用MVP+Dagger來開發(fā)項目,可以先看這篇文章
對比
之前我看了幾個使用MVP+Dagger+Retrofit開發(fā),并且有一定star量的開源項目,所以對比了下我的框架,有以下幾點:
使用Dagger的場景太少了,大部分只是使用Dagger注入MVP類,并且有些Retrofit都是自己new,并沒有使用Dagger管理,甚至有些使用一次接口就retrofit.create(ApiService.class)一次,這個本可以使用Dagger將它作為單例來調(diào)用的
有一些設(shè)計的Component和Module完全只是用來注入Activity和一些單例
@ActivityScope
@Component(modules = {ActivityModule.class},dependencies = {AppComponent.class})
public interface ActivityComponent {
void inject(AActivity activity);
void inject(BActivity activity);
void inject(CActivity activity);
...
}
只要多一個Activity,他就可以一直重載inject方法,于是就可以用一組component,module來為所有Activity注入,但是如果遇到Activity需要臨時注入一些其他的組件,并且每個Activity要注入的組件都不一樣,就沒辦法了,缺少靈活性
還是和第2條有關(guān),如果只有一個Module,
Dagger
就無法根據(jù)每個Presenter的需要,提供多個不同的Model,比如這個Presenter使用過這個接口,并且緩存已經(jīng)在Model中寫好,其他Presenter如果也要用到這個接口,就可以直接重用這個Model,MVP最大的好處之一就是可以重用M和P層有些沒有Model層,直接給Presenter注入Retrofit Api(有些是注入一個管理類,如果項目小接口少,這樣還不錯,但是有沒有想過項目一大,接口一多里面就非常混亂),所有網(wǎng)絡(luò)請求邏輯在Presenter中,如果現(xiàn)在需求變了,需要加入緩存,就需要更改Presenter的邏輯,這樣就可能影響一些和這個功能無關(guān)的邏輯,如果有Model層,里面持有請求網(wǎng)絡(luò)和緩存的功能類,這樣Presenter就不需要管,數(shù)據(jù)是從網(wǎng)絡(luò)還是數(shù)據(jù)庫獲取的,Model層只用保證返回給Presenter的數(shù)據(jù)無誤,而Presenter只用專注于邏輯,這樣各自只用保證各自的職責(zé),屏蔽細(xì)節(jié),易擴(kuò)展,出錯也好定位
如何用?
在項目中用到最多的就是向Presenter提供View和Model的同時,在向每一層提供所需要的單例類,并且使用Dagger不斷的重用Presenter和Model,其實Dagger
本來就抽象,說再多不如直接看代碼是怎么實現(xiàn)的,然后照著模版直接在自己項目中使用,本文的主題不就是在項目中怎么靈活使用Dagger
嗎?那就直接在項目中找答案不是更快?
Launch?
公眾號
掃碼關(guān)注我的公眾號 JessYan,一起學(xué)習(xí)進(jìn)步皇拣,如果框架有更新硼瓣,我也會在公眾號上第一時間通知大家
Hello 我叫 JessYan,如果您喜歡我的文章政鼠,可以在以下平臺關(guān)注我
- 個人主頁: http://jessyan.me
- GitHub: https://github.com/JessYanCoding
- 掘金: https://juejin.im/user/57a9dbd9165abd0061714613
- 簡書: http://www.reibang.com/u/1d0c0bc634db
- 微博: http://weibo.com/u/1786262517
-- The end