MVP架構實現的Github客戶端(1-準備工作)

系列文章:
1-準備工作
2-搭建項目框架
3-功能實現
4-加入網絡緩存

承上關于App重構的幾個方面主要也是說的架構重構, 本系列嘗試以開發一個Github客戶端為例, 記錄個人在開發一個App項目過程中的一個基本流程, 以及所采用的架構, 技術的運用, 在此過程也會說明下如何規避上文提到的一些代碼,架構等問題.

1, 架構選擇

毋庸置疑, MVP架構是目前開發Android App最火的架構, 可能MVVM更加吸引人, 但是MVP更加成熟且易于上手. 相比與Activity/Fragment包攬一切的傳統開發架構又更加靈活, 便于產品的更新迭代(特別是UI上的變化, 你懂的, 這也是產品們最喜歡變動的部分).
故此次開發的Github客戶端將采用MVP架構:


mvp-architecture
  • Model
    • 對外提供業務數據API.
    • 內部實現本地數據, 網絡數據的存取等.
    • 只有Presenter可以訪問, 與View隔離
  • Presenter
    • 持有View對象, 對View進行操作
    • 持有Model層提供的數據接口對象, 可通過依賴注入解耦此部分.
    • 從數據接口對象中獲取數據并處理, 更新View.
  • View
    • UI層, 包含所有UI相關組件.
    • 持有對應的Presenter的對象, 可通過依賴注入解耦此部分.
    • 由Presenter來負責更新UI.

2, 服務器API熟悉

當前大部分的App是需要與服務器交互的, 在開發之前, 我們也需要簡單了解下Github提供的API.
因為Github提供了詳盡的開發指南, 在此就不詳述了.

值得一提的是, Github API的標準的Restful架構的API, 這個是大贊的~

3, 開源庫選擇

快速開發一個項目, 且抱著不重復造輪子的思想, 選擇一些開源庫輔助開發是很必要的. 當然, 同類的開源庫可能很多, 選擇上可能更多是個人喜好和使用習慣的問題, 在此不做比較(可以哪天單立個開源庫選擇的話題討論下).
以下根據個人經驗和當前項目的情況初步選擇的一些庫:

網絡請求

  1. Retrofit
    • 一個類型安全(Type-Safety)的基于RESTful架構的Android(Java)客戶端實現?;?a target="_blank" rel="nofollow">注解,動態代理等技術。
    • 源碼地址
    • 官方教程
    • 項目中使用此框架來做服務器接口交互。
    • Retrofit只是一個RESTful的架構,可以通過它定義和服務器的接口形態,然而真正的HTTP請求還是需要借助HttpConnection或其他方式去完成的,這就用到了同由Square組織開發的OkHttp。
  2. OkHttp
    • 一個HTTP & SPDY的Android(Java)客戶端實現。目前Android4.4的源碼中HttpURLConnection已經替換成OkHttp實現,所以當前OkHttp是我們項目中Http請求的一個最常用的庫。
    • 源碼地址
    • 官方教程
    • 源碼解析

圖片加載

圖片加載的庫也有很多, 老牌的UIL(Universal-Image-Loader), google推的Glide, Square組織的Picasso, 以及facebook新晉的Fresco.
各有千秋, 關于這幾個的比較可以參考StackOverFlow上的這個問題.
在此個人選擇Glide.

  1. Glide
    • Glide本意是滑行,專注于快速Scroll中的圖片加載問題,當然也完全可以作為Remote Image的加載庫。Google在開發者論壇推薦的,并應用在Google的很多開源項目上。
    • 是一個快速且有效的開源媒體管理以及圖片加載的Android 框架,包含媒體解碼,內存、磁盤緩存以及資源池等。
    • 支持獲取、解碼、顯示視頻、圖片、GIF動態圖。
    • 源碼地址
    • 官方教程
  2. 另外, 個人習慣, 為了擁抱變化, 我會在Glide的基礎上再封裝一層, 以便可以很方便的替換成其他的庫. 如下:
public class ImageLoader {

    public static void load(Context context, Uri uri, ImageView view) {
        Glide.with(context)
                .load(uri)
                .centerCrop()
                .into(view);
    }
}

如需替換成Picasso, 僅僅修改ImageLoader這個文件即可, 由于Picasso的調用方式和Glide幾乎一樣, 我們要做的可能只是將Glide換成Picasso而已, 如下:

    // 將Glide換成Picasso
    // Glide.with(context)
    Picasso.with(context)
    ...

Rx支持

  1. RxJava
  2. RxAndroid
  3. RxLifecycle
    • 基于RxJava的Activity、Fragment生命周期控制組件。結合RxJava請求使用可以根據Activity、Fragment生命周期自動完成事件序列。避免需要手動調用unsubscribe。
    • 源碼地址
    • 官方教程
  4. RxBinding
    • Jake大神的大作, 用來將View的事件轉換成Rx模式 (大家可以跟隨項目見證它的妙處).
    • 源碼地址

依賴注入

這個一般會選擇大名鼎鼎的Dagger了, 現在使用的基本都是google fork修改之后的Dagger2.

  1. Dagger2

數據庫相關

這個也有很多選擇, 個人一般使用GreenDAO, 主要是其編譯生成類文件, 比較清晰, 便于看清原理.

  1. GreenDAO

另外, 最近Realm, 極其火爆, 說是基于移動設備打造的數據庫, 拋棄SQLite的存在, 可以在練手項目中嘗試下.

輔助

  1. Logger
  2. LeakCanary
  3. DBinspector

還有項目過程中還會根據實際情況增減一些庫, 到時再說.
另外可能會引入一些注入自定義View, 動畫等相關的庫, 也是根據產品的實際情況而定.


至此, 一個App項目的前期工作基本就緒了(當然, 這個是作為一個簡單的自研項目而言, 如果是公司產品, 還需更多的產品方面的準備, 在此單論技術方面).
接下來, 就會開始搭建項目框架了, 敬請期待.


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容