浅谈Android MVP openlayers加载Mapbox底图 用大数据为顾客“画像”帮小企业互联网转型 政务上云 服务在线(大数据观察) 大数据“杀熟”?明令禁止!《在线旅游经营服务管理暂行规定》10月起施行 大数据助力福州工程项目提质增速 中国电信:物联网用户突破2亿 Spring Cloud 里 Eureka 什么是微服务及微服务的特点 简历:第一章:技术亮点如何写 记录一个架构师的成长之路【持续更新中...】 MySQL sql语句中变量应用 Unity中加载Texture2D不断消耗内存的问题 mysql-8.0.21安装教程 游戏设计模式——中介者模式(Mediator) 拼多多笔试:最大士兵问题 京东2021校园招聘笔试(8.27编程部分)——数据开发工程师(数列变换A了9%) 电信物联网用户超2亿助大湾区产业数字化升级 中科创达携手宝时得启动全球物联网平台战略 单例模式:她真的很简单吗? Apache 网页与安全优化(网页压缩--缓存--防盗链等) 【解决方法】PHP Composer - Fatal error: Allowed memory size of xxx bytes exhausted Java中几种保障线程安全的设计技术 利用HashSet解决无重复字符的最长子串问题 什么是计时攻击?Spring Boot 中该如何防御? 第三届江西省高校网络安全技能大赛 部分wp&Crypto的疑惑 Hashtable和hashMap有什么区别(美的2020面试题) 在线旅游领域迎来重要监管规章——还想大数据杀熟?没门! 为经济社会发展注智赋能 中国电信物联网用户突破2亿 中关村物联网产业联盟与国教台、金丝结联手共建国际物联网平台 在大数据产业生态大会上 百分点高体伟被评为“中国数据英雄” 数读丨沿“线”布局“三核引领”大数据看山东高端装备产业发展新格局 物联网走入寻常生活 中国电信物联网用户突破2亿 赛迪白皮书:《2020中国大数据产业生态地图暨中国大数据产业发展白皮书》(可免费获取) 瓴盛科技的AIoT SoC能否撬动万亿级智慧物联网市场 中国数字经济已步入人工智能时代,给大数据杀熟戴上“紧箍咒” 程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万 专业篇丨网络工程、信息安全、物联网工程 物联网、微服务技术专家指点你线下实操?一场不可不来的技术沙龙 | Q推荐 晋安证券杨海:物联网和人工智能趋势对当今企业的影响 山东智能工厂大数据揭秘:新一代信息技术赋能传统产业转型升级 移动互联时代:给大数据杀熟戴上“紧箍咒” 除了 Coding,程序员获得收入的四大途径! RT-Thread推物联网操作系统!300毫秒启动安防摄像机 山东启动国家质量基础设施物联网线上平台 提升产品质量水平 美亚柏科发布2020年半年报:业绩逆势增长 大数据智能化产品发展迅猛 新民快评丨对“大数据杀熟”坚决说不 【行走自贸区】福州:树立物联网产业“马尾坐标” 【行走自贸区】福州:树立物联网产业“马尾坐标 福州:树立物联网产业“马尾坐标” Golang实践录:一个数据库迁移的代码记录
您的位置:首页 >程序人生 >

浅谈Android MVP

MVP的前身 — MVC

关于MVP,就必须要先介绍一下它的前辈MVC,因为MVP是基于MVC的基础发展而来的
MVC,全称Model-View-Controller,即模型-视图-控制器。
View:对应于布局文件
Model:业务逻辑和实体模型
Controllor:对应于Activity
但是View对应于布局文件,其实能做的事情很少,关于该布局文件中的数据操作和事件处理的代码都在Activity中,造成了Activity既像View又像Controller,使得Activity变得臃肿

MVP与MVC的区别

在这里插入图片描述

MVC中是允许Model和View进行交互的,而在MVP中,Model与View之间的交互由Presenter完成,Presenter与View之间的交互是通过接口的,MVC中V对应的是布局文件,MVP中V对应的是Activity

MVP

MVP模式通过Presenter实现数据和视图之间的交互,简化了Activity的职责,同时避免了View和Model的直接联系,又通过Presenter实现两者之间的沟通
View 对应于Activity,负责View的绘制以及与用户交互
Model 业务逻辑和实体模型
Presenter 负责完成View于Model间的交互
优点:解决了MVC中Contreller与View过度耦合的缺点,职责划分明显,更加易于维护
缺点:接口数量多,随着项目复杂度的提升,Presenter层将越来越臃肿

MVP核心流程

使用Presenter作为View与Model之间的桥梁,当View层某个界面需要展示某些数据的时候,首先会调用Presenter的引用,然后Presenter层会调用Model层请求数据,当Model层数据加载成功之后,Presenter层再调用View层的接口将加载后的数据展示给用户
在这里插入图片描述

Concacts类

此为契约类,将View、Presenter 进行约束管理,方便后期类的查找和维护

class MainConcacts {interface IView {// View层获取数据回调方法fun onResultData(data: MsgBean?)fun onResultFail(exp: String?)}interface IPresenter {// View层向Presenter发送请求方法fun requestData(context: Context?)}}

Presenter层

class MainPresenter(private var iView: MainConcacts.IView) : MainConcacts.IPresenter {//此写法可以弱化Model的作用,这里的网络请求就是Modle,可以省略Modle文件override fun requestData(context: Context?) {RxHttp.postForm(MainApi.URL).add("ID", id).add("index", index).add("size", size).asClass(MsgBean::class.java).observeOn(AndroidSchedulers.mainThread()).subscribe({ msg: MsgBean? ->iView.onResultData(msg)}) { throwable: Throwable? ->iView.onResultFail(throwable?.message)}}}

View层

class MainActivity : AppCompatActivity(), MainConcacts.IView {private val mainPresenter: MainPresenter by lazy {MainPresenter(this)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)mainPresenter.requestData(this)}override fun onResultData(data: MsgBean?) {text.text = data?.data?.get(0)?.descript}override fun onResultFail(exp: String?) {Toast.makeText(this, exp, Toast.LENGTH_SHORT).show()}}

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。