前言
- Q:我們在Android開發中,為什麼需要搭建框架?
這個問題,想必有很多新手會問,當然也包括以前的我。為什麼需要框架?搭建一個框架有什麼好處?
我們帶著這個問題開始探討......
如果沒有使用框架,我們的應用中可能會這樣:
-
Activity中,一堆的控制元件宣告和findViewById,或者ButterKnife的一堆BindView,或者兩者混合,沒有統一規範。且Activity裡程式碼又臭又長,有控制元件資料繫結、有業務邏輯、有事件處理等等。
-
網路請求,有些地方使用HttpUrlConnection,有些地方使用Okhttp,且每個網路請求都要寫一堆回撥處理、異常處理,並且不同網路庫處理還不一樣。
-
許可權申請的程式碼分佈在專案的各個角落,若需要修改許可權請求方式,需要一個個搜尋、修改,還可能會遺漏
-
運算元據庫的程式碼有的在主執行緒,有的在子執行緒,且資料庫有欄位修改,可能造成獲取資料異常
-
等等......
因此我希望搭建一個框架,可以:
-
不寫FindViewById
-
Activity和Fragment只處理ui互動事件,不關心業務邏輯,不處理業務資料
-
網路請求有統一的異常處理,能自動轉換成我需要的資料型別
-
資料庫自動轉換成我需要的實體類,不關心如何轉換、遊標需不需要關閉等問題
-
資料變化自動更新到ui
-
等等...
簡單點說,一切為了快速開發,就是儘可能地少寫程式碼,把重複工作交給框架,這樣能減少很多程式碼量,同時也比較不容易出錯(只要框架不出錯)。
那麼問題來了,如何搭建框架呢?且聽我慢慢說
一、語言選型
語言方面,Android開發考慮兩種語言:Java和Kotlin,Java想必是所有Androider都會使用的語言了,但這裡我推薦用Kotlin,為什麼呢?
自Google IO 2017以來,Kotlin被Google爸爸列為Android開發一級語言後,Github上越來越多的開源庫都開始使用Kotlin來編寫,甚至Google Developer官方教程中,也使用Kotlin來編寫demo。
Kotlin有什麼優勢:
-
可以從Java無縫過渡,Kotlin完全相容Java,你可以完全使用Kotlin開發,也可以Kotlin和Java混合使用
-
語法簡潔,相同邏輯的程式碼,在不失語義的前提下,Kotlin可以做到比Java更加簡潔,程式碼量更少
-
空指標安全,Kotlin提供安全的空值訪問,在編碼期間解決變數空值問題
-
擴充套件函式,Kotlin使用擴充套件函式在舊的類中新增新的擴充套件方法,例如:在String中新增日期轉換方法
-
更好用的資料類,不用再寫getter/setter等一大堆又臭又長的程式碼
-
等等......
簡單點說就是,Kotlin比Java好用些,並且如果你不怎麼會Kotlin,你可以一邊寫Java,一邊寫Kotlin,漸進地轉換到Kotlin開發,反正它們倆是相容的。
二、基礎架構選型
在Android界,我的思想是:面向Google程式設計,簡單點說,就是Google爸爸推薦用什麼庫,我就用什麼庫,Google爸爸就是Androider的模板。
Google爸爸的Android開發者中文頁面:developer.android.google.cn
為了構建更加健壯,使用者體驗更好的App,我們要用到Google爸爸這些個庫:
-
Support系列。包括support-v4、support-appcompat-v7、support-design、support-constraintlayout等等,Support系列包是Google推出的一些列相容包,使用這些庫開發Android App,可以獲得更好的相容性、健壯性和效能
-
Architecture components系列。Google IO 2018推出了一些列全新的開發工具包,Architecture components就是其中一個,它包括Data Binding、LifeCycle、ViewModel、LiveData、Room、WorkManager、Navigation等一系列庫,從生命週期到資料庫到執行緒工作等等。
三、開發模式選型
MVC、MVP、MVVM,這三種開發模式,想必是大家看到過最多的開發模式了,關於這三種開發模式的介紹,網上的資料多如牛毛,這裡就不多贅述,主要分析一下各自的優缺點,以供選型參考:
- MVC:將一個軟體結構分為Model-View-Controller三層,將檢視層和業務層做了分離。
缺點:在早期Android中,Activity/Fragment既是View層又是Controller層,View層與Model層直接通訊,程式碼相對臃腫,耦合度較高。 - MVP:軟體結構為Model-View-Presenter三層,其中View層不直接與Model層通訊,而是通過Presenter層去呼叫Model層的邏輯,同時通過Presenter取得Model返回的資料。一般來說,Activity作為View,只處理UI邏輯,View、Presenter、Model層均使用介面來解耦,相對MVC來說,耦合程度低,易於測試。
缺點:大大增加了程式碼量,每個頁面View、Presenter、Model都需要定義介面,且Presenter不易複用。 - MVVM:軟體結構為Model-View-ViewModel,其中View層只關心ui互動,ViewModel層負責處理業務邏輯,使用databinding或者LiveData自動將資料變化響應到ui介面。相對於MVP來說,耦合程度更低,View和ViewModel層都更容易測試,同時,減少了MVP中的大量樣板程式碼,更加簡潔清晰 因此,開發模式部分,我們選擇MVVM作為我們的主要開發模式。
四、其他架構選型
諸如網路請求、圖片載入、快取、路由......等等,篇幅考慮,將在後續文章中說明。
關注微信公眾號:Android必修課
漲知識? 學技能? 裝逼?
來這裡,給你想要的答案