网站首页 > 博客文章 正文
今天有一个朋友出去面试android开发,被问到了mvc和mvp中的相关问题。随着技术的发展,越来越多的公司还是普及mvp开发模式,要想能hold住公司的项目,必须对mvp有一个全面的了解,而面试这关出现了mvp的考题也不难理解了。
下面就对mvc和mvp做一个介绍,本文旨在帮助更多的同学更好的理解mvc和mvp思想,请各位大牛手下留情~~~~
我们先来说下mvc,先看张图
mvc
MVC:
model 模型,用来存放一些javabean和封装的业务逻辑等
view 视图,那么mvc中布局文件和activity、fragment等都有一些v的内容,只有布局才是纯粹的视图
controler 控制者(管理者)用来操作model并且更新view视图的,activity 和fragment也当做了controler
------------------------------------------------------------------------------------------------------------------------------------------------------------------
根据mvc的设计,activity 或者fragment他们处理的事务比较多,既处理视图的逻辑,还处理其他的逻辑。
比如:加载数据,定位,支付等等,这样的话会导致activity 或者fragment代码量略多。
有经验的开发者会通过代码抽取减少activity和Fragment的代码量,但是即使这样抽取了,activity 或者fragment的业务逻辑还是比较多的,所以说有可能会报出一个这样的错:mainthread has do too many things,类似这样的错误,同时存在一个隐患,由于activity 或者fragment的业务很复杂,势必会让声明或者定义的变量和方法过多,从而造成OOM,如果还多次使用静态修饰,还有可能会造成内存泄漏。
所以说mvc在设计的时候初衷是好的,但是真正让android程序员实现的时候就变了意思,不过这里提一下,java后端目前还是使用的ssh 框架,设计思想是mvc。
MVP
好,接下来我们看一下mvp,还是先看一张图
mvp
从这个图不难看出,mvp相对mvc的优化是:避免了view和model之间的相互访问调用。
完美的解决了mvc设计时的初衷,就是说隔离model view
model: 模型 用来存放一些javabean和封装的业务逻辑等
view : 视图 布局 ,除此之外,我们需要定义view接口来动态改变布局 ,view接口的实现类是activity、fragment,所以说这个时候activity 和fragment专门成了view
presenter: 呈现者 是model view之间的沟通者,用来操作model更新view,我们在编程时需要单独定义Presenter接口及Presenter的实现类,让presenter去处理业务逻辑,从而为activity减压。
ok,以上就是mvc和mvp的一些区别,各位小伙伴有没有一点思路了呢?如果还是不理解可以留言,我会再进行解答。
题外:目前我的一些同事中已经开始使用mvvm进行编程了,这个编程一般是通过Data Binding框架来实现的,这个在以后的文章中再给大家介绍。
猜你喜欢
- 2024-10-12 Android高级/资深面试题(android 面试题2021高级)
- 2024-10-12 广州蓝景分享 「前端面试题系列-Vue.js篇」99%的面试官都会提问
- 2024-10-12 阿里腾讯头条美团等iOS面试总结(美团 腾讯 offer)
- 2024-10-12 今天字节前端二面40min都问了什么内容
- 2024-10-12 字节面试被刷了三次,还好没放弃,终于等到你(含面经)
- 2024-10-12 阿里,百度等100家企业级iOS面试题,打造国内企业欢迎的程序员
- 2024-10-12 新鲜出炉,2022中高级Android面试必知百题(面试题+答案解析)
- 2024-10-12 备战金九银十:当你裸辞遇到了面试难,你需要了解一下这些面试题
- 2024-10-12 「前端面试」|酷狗音乐校招前端一面经历
- 2024-10-12 大厂面试原来是这样的,这份面试经你值得拥有
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)