美文网首页Android
Android应用框架:浅谈MVC与MVP

Android应用框架:浅谈MVC与MVP

作者: 越小河流域 | 来源:发表于2016-04-28 18:00 被阅读693次


    1 服务端的MVC模式

    PHP MVC模式的通信图:

    以一个图书列表+图书详情的应用为例,文件结构如下:

    PHP MVC 文件结构

    PHP MVC Controller

    负责接收与响应HTTP请求。为了把HTML页面与数据绑定后呈现给用户Client,Controller需要从Model获取数据,从View获取HTML模板。

    用户访问网页的入口文件index.php文件,该文件调用Controller的invoke方法。

    // index.php file

    include_once("controller/Controller.php");

    $controller=newController();

    $controller->invoke();

    Controller的invoke方法:1、从Model获取数据;2、将数据传递给View的HTML模板,然后View把整合数据的模板回传给Controller。

    例如,获取图书列表:

    $books=$this->model->getBookList();

    include 'view/booklist.php';

    获取图书详情

    $book=$this->model->getBook($_GET['book']);

    include 'view/viewbook.php';

    下图结合代码调用过程描述了上述过程:

    Web MVC Pattern

    2 Android应用架构的默认模式

    Android应用架构默认的模式是什么?如果没有分层的概念,Android的确没有限定的应用架构。

    2.1 混沌时期 - V与C的耦合,M仅仅是Data bean

    Activity是学习Android最初接触也是最常用最基本的一个组件,仅仅完了完成页面,很多公司一个人开发项目都喜欢在Activity堆了上千行代码。从代码形态看,没有分层,视图加载,网络请求,视图更新都放在同一个Activity,后续维护非常困难。

    更详细的过程看参考,你是如何把Activity写的如此“万能”的 :link

    在Android实践MVC的缺点:

    1、Activity作为Android的页面显示组件,做MVC应用架构中担任Controller Layer,去加载数据,把数据传给View组件,然后显示出来。这使得View与Controller分不清。MVC模式不能在Android中清晰发挥作用。

    2、页面交互逻辑复杂时无法清晰实现。

    3、数据源结构复杂无法与页面解耦。

    4、异步操作时,容易陷入多层回调陷阱。而且,Activity容易被异步组件持有导致Activity内存泄露

    Model层仅仅有Data beans的问题:无法

    那么,Android的Activity应该扮演什么角色?

    3 Android的其他MVC模式

    在Android中有常见的ListView,GridView等一些控件能够很好的体现MVC模式。

    3.1 ArrayList-ListView-Adapter

    写一个ListView要实现需要以上三种元素,刚好对应MVC模式。

    Controller Layer:Adapter,负责获取数据并在getView方法,更新ListView(View Layer)的数据。

    Model Layer:ArrayList是一部分,负责存储数据;如果要从网络、数据库获取数据,则获取数据的组件也属于Model Layer。如果要与View Layer做数据绑定,运用观察者模式,在Model Layer添加notify方法,通知Controller,Controller更新View。

    View Layer:ListView。

    3.1.1 为什么ArrayList-ListView-Adapter是MVC,不是MVP?

    因为MVC中的C会输出View,而MVP的P不输出View,只会传递数据给View。Adapter的getView会直接输出View。所以,实践过程中要尽量把V与C解耦,则把getView中的View事件交互封装抽离。 #ListView数据绑定的实践#

    3 关于MVP

    MVC的变体,通过P解耦M和V。P不负责输出View,仅仅负责业务逻辑,并把数据交给View Layer。

    Activity作为纯粹的View,不负责数据加载、业务逻辑。

    这次总结到这里,下次总结MVP的实践。

    更多关于MVP的资料:

    Android官方MVP架构示例项目解析

    选择恐惧症的福音!教你认清MVC,MVP和MVVM

    这篇文章对MVC/MVP/MVVM有很多自己的思考,为什么要有这样架构的演变,以及各自的优缺点的思考,很棒!

    如何设计MVP中的Presentation层

    大部分业务场景一个View对应一个Presenter,但是如果一个界面需要多个View/Presenter或者同一个View有多个实现且使用同一个PresenterView时候,如何来设计Presenter,这篇文章是很好的延伸阅读。

    via 解读Android官方MVP项目单元测试 - 简书

    参考资料

    Model View Controller(MVC) In PHP Tutorial

    Understanding MVC, MVP and MVVM Design Patterns

    Android中常见的MVC模式 - sylcc_的专栏 - 博客频道 - CSDN.NET

    选择恐惧症的福音!教你认清MVC,MVP和MVVM | zjutkz's blog

    相关文章

      网友评论

        本文标题:Android应用框架:浅谈MVC与MVP

        本文链接:https://www.haomeiwen.com/subject/djvfrttx.html