×

Android model层设计

96
牛晓伟
2018.02.04 11:11 字数 629

model层

在开发app的过程中,不管是使用了mvp还是mvc甚至mvvm模式,model层的设计基本都是一样的,model层可以被称为数据层,它的主要任务就是为上层提供各种的数据服务,上层完全不需要关心这些数据是来自网络,还是内存,还是本地存储。

那我们就通过一个时序图来看下model层的工作流程


8F09B23E-E1C2-44D7-A45D-C37FFD1B8C63.png

上面的时序图只是反映了数据获取的正常的一个流程,根据业务的不同,数据到底是从内存还是从本地还是从网络获取都是不同的,有些业务会直接从网络获取数据,有些业务会根据本地数据的有效期等进行判断到底是从网络获取还是依旧从本地获取,并且比如从网络返回的数据,有些业务是不需要存储在本地和内存中的,有些则需要从网络获取到数据把本地和内存中的数据进行更新

注意点

从网络获取的数据类型异常校验
看一段从网络返回的json数据

     {
          "code":0,
          "msg":"ok",
          "data":{
                "age":"",
                "weight":"uy8",
                "name":"null"
          }
    }

上面数据中age和weight都是一个int类型值,这时候服务器返回的确实一个空字符串和一个非数据字符串,假如不做任何处理的话,app就会奔溃了,name的类型是字符串,但是服务器却返回了null,在界面显示上肯定不友好
因此为了增加app的健壮性,针对以上的情况,model层就需要对这些异常类型数据做处理,不管是Gosn还是其他的解析库都提供了相应的处理方法

网络返回实体数据类设计
实体数据类的设计可以有两种:一种是继承,一种是使用泛形。
继承

      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等信息
因此根据自己的实际业务来进行使用,没有哪种更好,只有哪种更适合业务

Android
Web note ad 1