文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MVP实现Android应用层开发原理及过程

2022-06-06 12:52

关注

  背景   之所以要谈这个话题是因为你在开发App时可能会发现,Activity担负的责任非常之重,如果站在MVC框架角度看自己开发的App,一般xml布局文件科Activity的setContentView等充当了View角色,Activity其他代码充当了Controller角色,其他数据来源(数据库等)充当了Model角色。所以你会发现Activity违背单一职责原则,负担过重。同时如果要测试逻辑数据层会发现比较难编写测试用例。由此来构想,有没有一种解耦的方法呢?   有,那是MVP框架。   MVP架构   MVP是Model-View-Presenter。其实不用做太多解释,如下图所示你能明白大致:

  如上图所示可以看见MVP模式需要具备如下三要素:   左侧的View。也是Android中的Activity。同时需要创建一个View的抽象接口View interface。需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合。   右侧的Model。用来操做实际数据(譬如数据存储等)。有时也需要创建一个Model的抽象接口Model interface用来降低耦合。   中间的Presenter。作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。   程序猿的纠结—MVP与MVC   看完上面两段,你可能会疑惑MVP,还有一个MVC,他两啥关系?   那再来看下MVC吧!   MVC架构   MVC框架认为软件可以分成如下三个部分:   视图(View):用户界面。   控制器(Controller):业务逻辑。   模型(Model):数据保存。   如下图很直观的展示了MVC框架的核心:

  View传送指令到Controller,Controller完成业务逻辑后,要求Model改变状态,Model将新的数据发送到View,用户得到反馈。   MVP与MVC对比   这时候你会发现MVC与MVP的结构图都有很大区别,具体区别如下:   MVP架构:   View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。   Presenter与View的交互是通过接口来进行的。   通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。   MVC架构:   View可以与Model直接交互。   Controller是基于行为的,并且可以被多个View共享。   可以负责决定显示哪个View。   总结   MVC与MVP很相似,但又有很大区别,站在不同分析角度会有不同的观点,这里只是站在基于Android App代码下来分析的结果。   MVP架构的Android应用实战:   完整工程代码点我进入下载页面   背景:如下案例模拟一次用户交互存取数据的过程,用户输入数据后点击保存,然后数据将保存的数据获取的操作。   UI界面:

  工程目录结构:

  详细代码:   首先看model层代码,model层提供抽象接口,方便解耦,同时方便测试用例测试model的impl实现代码。如下展示了抽象接口和实现代码。   Model层抽象接口:   public interface IInfoModel {   //从数据提供者获取数据方法   InfoBean getInfo();   //存入数据提供者方法   void setInfo(InfoBean info);   }   Model层抽象实现:   public class InfoModelImpl implements IInfoModel {   //模拟存储数据   private InfoBean infoBean = new InfoBean();   @Override   public InfoBean getInfo() {   //模拟存储数据,真实有很多操作   return infoBean;   }   @Override   public void setInfo(InfoBean info) {   //模拟存储数据,真实有很多操作   infoBean = info;   }   }   接着看View层代码,View层同样提供抽象接口,方便解耦,同时方便测试用例测试View的impl实现交互代码。如下展示了抽象接口的代码。   View层的抽象接口:   public interface IInfoView {   //给UI显示数据的方法   void setInfo(InfoBean info);   //从UI取数据的方法   InfoBean getInfo();   }


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯