美文网首页Android网络框架
谈谈MVC模式和MVP模式

谈谈MVC模式和MVP模式

作者: ReturnYHH | 来源:发表于2016-07-30 20:34 被阅读621次

前言

最近在研究Android的MVP设计模式,经过自己的研究和参考网上的案例,对MVP设计模式也有了一定的了解,今天把自己的一些想法分享出来
参考:
泡在网上的日子
鸿洋的博客

MVC模式:

什么是MVC模式?MVC模式是一种在开发当中常见的设计模式,通过视图,模型和控制层的拆分设计,使得开发更加容易,后期也更加好维护

-M:Model(模型)Model主要是各种操作,数据结构,业务逻辑和功能的实现等
-V:View(视图)View就是在layout下的各种布局文件,这个相信很容易理解
-C:Controller(控制器)Controller就是各种Activity或Fragment,这个也很容易

三者的关系:

如图:

MVC

我们很容易看到他们三者之间都是有联系的,在开发中怎么设计呢?例如用户登录功能,xml布局文件就是view层,LoginActivity就是Controller层,model层就是登录的方法,通过btn.setOnClickListener()方法调用model层的登录方法,就完成了一个登录的功能,这就是MVC的设计模式

但是,有个问题,很多时候我们的需求并不只是简简单单的一个登录功能,还有很多复杂的处理,比如我们想在登录完成后,把当前的页面的Logo隐藏,又或者替换掉当前页面的背景,按道理来说,这些关于页面的操作是在布局页面,也就是View层,但是这些都不能再xml中去实现,只能在Activity中操作,但是Activity是属于Controller层啊,这就导致了Activity既是Controller层又是View层,讲道理,如果代码越来越多,逻辑越来越复杂,这就很尴尬了,不禁写的麻烦,维护更加头疼,还有,view层和model层是互通的,这就说明两者存在耦合性,如果是个大型的项目,显然,这是非常不好的,这就衍生出了MVP设计模式


MVP模式:

什么是MVP模式?MVP模式是MVC模式的进化,解决很多MVC的一些设计缺点,比如耦合性

-M:Model(模型)跟MVC的一样
-V:View(视图)各种Activity或Fragment,这跟MVC的有点差别了
-P:Presenter(主导期)处理用户触发事件

三者的关系:

如图:

MVP

相对MVC来言,我们发现,View和Model之间没有直接的联系,而是通过Presenter进行连接,MVP模式舍去了xml布局所在的层,并把改层放置的是Activity或是Fragment,这样,解除了MVC的耦合性的问题,对于这三者的沟通,我们主要是通过接口的方式实现,还是以登录功能为例,首先,我们在Model层以接口形式定义一个登录的方法,然后定义一个类去实现这个方法,而Presenter则去调用这个方法,然后再View层去调用Presenter的实现方法,就可以完成了登录的功能,这就避免了耦合性,也大大的优化的代码,也便于后期的维护

示例代码:

项目结构图

LoginUtil类:

public interface LoginUtil { void Login(Context context); }

LoginUtilImp类:

public class LoginUtilImp implements LoginUtil { @Override public void Login(Context context) { Toast.makeText(context,"loging",Toast.LENGTH_SHORT).show(); } }

Logining类:

public class Logining { private LoginUtil mLoginUtil; private Context mContext; public Logining(Context context){ this.mContext=context; this.mLoginUtil=new LoginUtilImp(); } public void login(){ mLoginUtil.Login(mContext); } }

MainActivity类:

mBtnLogin.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { mLogining.login(); } });

总结:

MVC和MVP两者说到底最大的差别就是耦合性,随着APP的功能的增强,View层处理的东西越来越多了,为了更好地细分视图与模型的功能,所以,MVP设计模式更切近我们的开发,一个好的项目,往往都是从设计模式开始,最后,有哪里不足的欢迎指出来

相关文章

  • MVC - MVVM 是什么

    MVC - MVVM 是什么 谈谈MVC模式 - 阮一峰 MVC,MVP 和 MVVM 的图示 - 阮一峰 MVC...

  • 谈谈MVC模式和MVP模式

    前言 最近在研究Android的MVP设计模式,经过自己的研究和参考网上的案例,对MVP设计模式也有了一定的了解,...

  • 架构设计和设计模式

    谈谈你对Android设计模式的理解 MVC MVP MVVM原理和区别 你所知道的设计模式有哪些? 项目中常用的...

  • Android基础(38)设计模式

    1)谈谈你对Android设计模式的理解2)MVC MVP MVVM原理和区别3)你所知道的设计模式有哪些?4)项...

  • 日常笔记 - MVP

    1 前言 MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Act...

  • iOS开发学习笔记:对MVC、MVVM建立认识

    本文参考: iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译) 浅谈 MVC、MVP...

  • 像小白一样学习MVP

    MVP与MVC MVP是从MVC的延伸。为什么要会出现MVP模式:那我们得了解一下MVC模式到底是一个怎样的模式:...

  • MVP模式

    简介 MVP 是从经典的模式MVC演变而来。 在MVC/MVP模式中Controller/Presenter负责逻...

  • Android MVP实践

    MVP模式从经典的MVC模式而来,M: Model, V:View, P:Presenter。MVP与MVC有着一...

  • iOS开发中的设计模式/Design patterns in i

    MVC模式 MVC pattern 从通信的角度看,iOS的MVC更接近MVP模式:因为View和Model之间不...

网友评论

  • 920611c8bbbb:请教下,你说mvc中"view层和model层是互通的,这就说明两者存在耦合性"。想问下View和Model是怎么互通和耦合的呢?

本文标题:谈谈MVC模式和MVP模式

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