关于androidMVP模式

作者:Sanyu发布时间:2016-02-03

1 概述

Android Architecture Blueprints是Google官方版本的MVP实现,我们通过https://github.com/googlesamples/android-architecture/tree/todo-mvp可以阅读具体源码。AAB用于TODO计划任务的管理,主要有TODO列表、添加新的TODO、查看TODO详情与TODO统计等功能,总体来说,该案例具有较强的参考价值,特别是在数据存储方面提供了三种方式:远程数据存储、本地数据存储和缓存存储,并使用了标准的MVP设计模式,如图1所示。


2 MVP

MVP从MVC架构模式演化而来,MVC分别代表模型、视图和控制器,在Android中,定义Class类作为模型,Layout XML表示视图,而Activity用作控制器,这样一来,在Activity中充斥了大量代码,无论是从扩展性和重用性都无法达到理想的效果。个人以为,MVC分层在Android App开发中显得极为牵强。而MVP解决了这个问题。

MVP即为Model、View和Presenter。Model表示模型,实现数据存储与业务逻辑;View表示视图,提供用户交互的接口;Presenter表示主导器,相当于MVC中的Controller但比Controller更灵活。


AView将功能委托给Presenter完成,Presenter调用Model完成业务功能与数据存储,并再次通过View更新UI

BViewModel没有直接关联,无法相互调用;

CPresenterView可以相互调用;

DPresenter调用Model完成业务功能。


3 MVP的优劣点

优点:

1:很好的模块管理,单元测试

2:代码工整,分工明确

3:结构清晰,方便后来者维护

缺点:

1:每个view都有个presenter,类变多了。


经过短时间的实际使用个人认为mvp模式能很好的提升代码的可读性和可扩展性,将Model和View分开视图不直接调用数据,只抛出接口以"我就在这,你给就拿,不给就罢"的姿态存在。View和Presenter可以互调 Presenter中拥有View和Model的引用,Presenter使用Model获取数据通过接口传给View使界面与数据没有直接关联便于后期维护,同时每一个功能模块的完成我们需要生成5个java类View的接口Model的接口以及View和Model的实现类与Presenter。

对于刚使用mvp模式进行开发的工作人员可能在用时上比原mvc模式慢,不过好处也是很明显的,代码读起来有一种优雅的美感,分层明确,可移植性好每个模块互不干扰,很有利于模块调试,不会使Activity中充斥着大量混杂的代码。在mvc框架中Activity究竟算是属于V还是C还是两者都是,并没有明确答案的。


4 面相接口编程

优秀的命名规则和好的接口设计,可以让人轻易看懂你的代码,即便某个模块读不懂,也能知道这个模块实现了这个功能。深入理解面相对象的意义,想往高级程序员发展这条路是必须经历的。

java的高内聚低耦合是一贯的设计思维几乎所有的设计模式都是为了解耦,将大工程拆分成小模块,然后分配多名工程师同时进行开发,出了问题也能很快找到相关负责人。对于工程浩大的项目这是非常重要的!不过对于简单的功能也分得很细就得不偿失了。

当我们怀疑面向接口编程的必要性时,Google通过现实案例马上打消了我们的这种想法。面向接口编程是一门优雅而美好的代码艺术,功能之间通过轻量级的接口联系在一起,摆脱了低级趣味的依赖关系。通过这种极度抽象的上层建筑来维护组件之间的关联,大大增强了代码的艺术性、维护性与重用性。

所以,View要定义接口,Presenter要定义接口,Model也要定义接口。

每一个界面都涉及到五个组件:ViewPresenterContractModelActivity。其中,View定义了与UI相关的操作,比如提示信息的显示与隐藏、状态的改变、数据的显示、新Activity的打开等等,Fragment将实现View接口;Presenter是功能实现的粘合剂,View的功能委托给PresenterPresenter调用Model完成业务功能,最后Presenter再次调用View来更新UIContractViewPresenter两个接口进行集中管理;Model实现业务功能与数据存储;Activity是界面显示的起点,负责创建其他各个组件,并依次维护各组件之间的关系。

扫描二维码关注 旭邦互动
随时获取最新动态
返回顶部在线咨询021-52896658PDF下载