model層
在開發(fā)app的過程中,不管是使用了mvp還是mvc甚至mvvm模式,model層的設(shè)計基本都是一樣的擦秽,model層可以被稱為數(shù)據(jù)層腌紧,它的主要任務(wù)就是為上層提供各種的數(shù)據(jù)服務(wù)期丰,上層完全不需要關(guān)心這些數(shù)據(jù)是來自網(wǎng)絡(luò)件甥,還是內(nèi)存,還是本地存儲孽锥。
那我們就通過一個時序圖來看下model層的工作流程
上面的時序圖只是反映了數(shù)據(jù)獲取的正常的一個流程嚼黔,根據(jù)業(yè)務(wù)的不同,數(shù)據(jù)到底是從內(nèi)存還是從本地還是從網(wǎng)絡(luò)獲取都是不同的惜辑,有些業(yè)務(wù)會直接從網(wǎng)絡(luò)獲取數(shù)據(jù)唬涧,有些業(yè)務(wù)會根據(jù)本地數(shù)據(jù)的有效期等進(jìn)行判斷到底是從網(wǎng)絡(luò)獲取還是依舊從本地獲取,并且比如從網(wǎng)絡(luò)返回的數(shù)據(jù)盛撑,有些業(yè)務(wù)是不需要存儲在本地和內(nèi)存中的碎节,有些則需要從網(wǎng)絡(luò)獲取到數(shù)據(jù)把本地和內(nèi)存中的數(shù)據(jù)進(jìn)行更新
注意點
從網(wǎng)絡(luò)獲取的數(shù)據(jù)類型異常校驗
看一段從網(wǎng)絡(luò)返回的json數(shù)據(jù)
{
"code":0,
"msg":"ok",
"data":{
"age":"",
"weight":"uy8",
"name":"null"
}
}
上面數(shù)據(jù)中age和weight都是一個int類型值,這時候服務(wù)器返回的確實一個空字符串和一個非數(shù)據(jù)字符串抵卫,假如不做任何處理的話狮荔,app就會奔潰了,name的類型是字符串,但是服務(wù)器卻返回了null介粘,在界面顯示上肯定不友好
因此為了增加app的健壯性殖氏,針對以上的情況,model層就需要對這些異常類型數(shù)據(jù)做處理姻采,不管是Gosn還是其他的解析庫都提供了相應(yīng)的處理方法
網(wǎng)絡(luò)返回實體數(shù)據(jù)類設(shè)計
實體數(shù)據(jù)類的設(shè)計可以有兩種:一種是繼承雅采,一種是使用泛形。
繼承
public class BaseResponse{
private int mCode;
private String mMsg;
}
public class UserInfo extends BaseResponse{
private int mAge;
private int mWeight;
}
泛形
public class Response<T>{
private int mCode;
private String mMsg;
private T mData;
}
public class UserInfo{
private int mAge;
private int mWeight;
}
繼承的好處是有一些實體類是需要獲取到code值,不好的地方是其實大部分實體類其實沒必要知道code婚瓜,msg等信息的存在
泛形的好處顯而易見宝鼓,大部分實體類完全不知道code,msg等信息
因此根據(jù)自己的實際業(yè)務(wù)來進(jìn)行使用巴刻,沒有哪種更好愚铡,只有哪種更適合業(yè)務(wù)