android model 设计,Android model层设计

model层

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

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

2fef30032de0

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{

private int mCode;

private String mMsg;

private T mData;

}

public class UserInfo{

private int mAge;

private int mWeight;

}

继承的好处是有一些实体类是需要获取到code值,不好的地方是其实大部分实体类其实没必要知道code,msg等信息的存在

泛形的好处显而易见,大部分实体类完全不知道code,msg等信息

因此根据自己的实际业务来进行使用,没有哪种更好,只有哪种更适合业务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2134. 最少交换次数来组合所有的 1 II(数组*2 + 滑动窗口)

文章目录1. 题目2. 解题1. 题目 交换 定义为选中一个数组中的两个 互不相同 的位置并交换二者的值。 环形 数组是一个数组,可以认为 第一个 元素和 最后一个 元素 相邻 。 给你一个 二进制环形 数组 nums ,返回在 任意位置 将数组中的所有 1 聚集在一…

四、pink老师的学习笔记——元素的显示与隐藏

1. 元素的显示与隐藏 目的 让一个元素在页面中消失或者显示出来 场景 类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现! 1.1 display 显示(重点) display 设置或检索对象是否及如…

SpringMVC详解

来源:Sunnier(http://www.admin10000.com/document/6436.html) 一、SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 12345678910111213141…

html写学生信息管理,vue实现简单学生信息管理案例

学生信息管理#app{margin: 10px;}学号:姓名:搜索姓名关键字:学号姓名添加时间操作{{item.stuNo}}{{item.name}}{{item.cTime | dateFormat}}删除// 自定义自动获取焦点的全局指令Vue.directive(focus,{// 当被绑定的元素插入到 DOM 中时……i…

LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希)

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的字符串数组 startWords 和 targetWords 。每个字符串都仅由 小写英文字母 组成。 对于 targetWords 中的每个字符串,检查是否能够从 startWords 中选出一个字符串,执行一次 转换操作 &#xff0…

五、pink老师的学习笔记——CSS精灵技术(sprite)

5. CSS精灵技术(sprite) 重点 5.1 为什么需要精灵技术 图所示为网页的请求原理图,当用户访问一个网站时,需要向服务器发送请求,网页上的每张图像都要经过一次请求才能展现给用户。 然而,一个网页中往往会应用很多小的…

Javadoc的Html文件传输chm

Javadoc的Html文件转chm 工具下载地址:http://msdn.microsoft.com/en-us/library/ms669985.aspx 两篇相关文章: MyEclipse生成javadoc文档http://blog.csdn.net/kakarot5/article/details/40683837 Java凝视总结http://blog.csd…

html校园首页设计说明范文,网页设计作品设计说明-必看请相互转告

width:895px;height:130px;margin:auto;}#middle_box{width:895px;height:278px;clear:both;margin:auto;background:url(images/middle_bg.jpg) no-repeat center;}#footer{width:895px;height:48px;margin:auto;color:#508aa1;border-top:1px #b2bbbb dashed;}六、作品设计心…

六、pink老师学习笔记——CSS三角形之美 margin负值之美文字围绕浮动元素行内块元素布局的巧妙运用

7. 拓展 7.1 margin负值之美 1). 负边距定位:水平垂直居中 咱们前面讲过, 一个绝对定位的盒子, 利用 父级盒子的 50%, 然后 往左(上) 走 自己宽度的一半 ,可以实现盒子水平垂直居中。 2). 压住盒子相邻边框 上图第…

LeetCode 2136. 全部开花的最早一天(贪心)

文章目录1. 题目2. 解题1. 题目 你有 n 枚花的种子。每枚种子必须先种下,才能开始生长、开花。播种需要时间,种子的生长也是如此。给你两个下标从 0 开始的整数数组 plantTime 和 growTime ,每个数组的长度都是 n : plantTime[i…

leetcode Excel Sheet Column Number

题目连接 https://leetcode.com/problems/excel-sheet-column-number/ Excel Sheet Column Number Description Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, return its corresponding column number. For example: A …

html悬浮窗口退出,网页中可关闭的漂浮窗口实现

注释部分为广告的左右调节,可以自行设定网页中可关闭的漂浮窗口关闭点击这里,关闭广告!!!var bodyfrm ( document.compatMode.toLowerCase()"css1compat" ) ? document.documentElement : document.body;v…

pycharm profile对函数调用效率进行测试

假设有如下代码: def func1():for i in range(1000):print("i love python")def func2():for i in range(10):print("i love c")func3()def func3():for i in range(100):print("i love java")def main():func1()func2()if __name__…

八、pink老师的学习笔记—— CSS用户界面样式(鼠标样式、轮廓线、防止拖拽文本域)

2. CSS用户界面样式 所谓的界面样式, 就是更改一些用户操作样式,以便提高更好的用户体验。 更改用户的鼠标样式 (滚动条因为兼容性非常差,我们不研究)表单轮廓等。防止表单域拖拽 2.1 鼠标样式cursor 设置或检索在对象上移动的鼠标指针采…

SequoiaDB 系列之六 :源码分析之coord节点

好久不见。 在上一篇SequoiaDB 系列之五 :源码分析之main函数,有讲述进程开始运行时,会根据自身的角色,来初始化不同的CB(控制块,control block)。 在之前的一篇SequoiaDB 系列之四 &#x…

html导航教程视频,导航_HTML+CSS前端基础知识教程_腾讯视频

更多资料源码请加3252897743第1天 html 1、HTTP协议 2、html是纯文本3、html骨架4、DTD文档类型5、head标签6、body标签7、html基本语法8、h系列的标签9、p标签10、img标签11、a标签12、div和span含义第2天 html1、无序列表2、有序列表3、定义列表6、表格基础7、合并单元格…

LeetCode 2138. 将字符串拆分为若干长度为 k 的组

文章目录1. 题目2. 解题1. 题目 字符串 s 可以按下述步骤划分为若干长度为 k 的组: 第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推。每个字符都能够成为 某一个 组的一部分。对于最后一组,如果字…

九、一篇文章帮助你读懂CSS属性:vertical-align 垂直对齐

3. vertical-align 垂直对齐 有宽度的块级元素居中对齐,是margin: 0 auto;让文字居中对齐,是 text-align: center; 但是我们从来没有讲过有垂直居中的属性。 vertical-align 垂直对齐,它只针对于行内元素或者行内块元素, verti…

计算机用户登录,计算机术语:密码、用户、登录

下面是日语计算机术语,育路教育网特别为您搜集整理,内容如下:パスワード:密码,来源自英文“password”。例:パスワードを入力する。输入密码。画面から取得されたパスワードはテーブルに格納します。从画面…

LeetCode 2139. 得到目标值的最少行动次数(贪心)

文章目录1. 题目2. 解题1. 题目 你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。 在一次行动中,你可以做下述两种操作之一: 递增,将当前整数的值加 1(即, x x 1)。加倍&#…