mvc架构和mvp架构
mvc,mvp其实是复合模式,是多个设计模式的组合:将多个模式结合起来形成一个框架,已解决一般性问题。
mvc:
既然mvc是复合模式,那么是由哪些设计模式组合的呢?
- 观察者设计模式:view和controller都是model的观察者(model的状态更新及时通知view更新,或者通知c做相应逻辑处理);
- 策略模式:controller是view的策略,所以view包含的控制逻辑就是选择策略,也就是选择控制器controller.
- 组合模式:view的自身实现应用了组合模式。
耦合性比较高,view model controller都可以相互访问。
model view controller 模式 视图 控制器。
在android中
- view 对应于 视图布局xml文件;
- model 对应于数据文件或者网络获取的数据体,业务逻辑,数据处理;
- controller 对应activity,fragment。
activity(controller)中获取数据(model)并将数据展示在view上面去。
activity将view和model进行分离,在activity中进行绑定和完成逻辑。
mvc的优缺点:
优点:
- 分工明确,使用mvc可以把数据库开发,程序业务逻辑开发,页面开发分开,每层具有相同特征,方便代码维护
- 松耦合,视图层,业务层分离,这样修改视图层(view),不用编译模型(model)和控制器(contorller)代码。业务流程规则改变修改模型层(model)。
- 可重用性强,多个view可以公用同一套model。
缺点:
view和model耦合相对较高,view可以直接访问model,view就会包含model信息,业务逻辑就会在view里面实现,更改view就比较困难,业务逻辑无法重用。
mvp:
m和v直接必须通过p才能访问,m和v不能直接进行交互。
model(数据层): 数据获取 对数据进行存储 获取(数据库操作,网络请求操作)
view(UI层) :activity,fragment 或者view,包含presenter成员变量,实现p的抽象接口,将对view上的业务逻辑放到p上实现,p调用view的逻辑将结果进行展示到view上。
presenter(业务逻辑层):用来解耦model和view。
mvp有效降低view的复杂度,避免大量业务逻辑放在view上面,解除view和model的耦合,可扩展,可测试,保证系统整洁,灵活。view层不能和model层直接交互,必须经过p层来进行中转。也就是说数据和视图的逻辑控制都放在p层。
目标:一套逻辑适用不同UI。
mvp优缺点:
优点:
- model与view完全分离,我们可以修改view而不影响model,也就是解耦合;
- 交互逻辑主要是在presenter里面进行;
- presenter中的逻辑可以适用于多个view里面,无需修改p里面的代码;
- 有利于单元测试。
缺点:
- 定义大量的接口;
- view和presenter的交互过于紧密,view更新,presenter需要更新。
mvc架构和mvp架构的更多相关文章
- MVC 与 MVP 架构 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- MVP架构。。。。
Model-View-Presenter(MVP)概述 MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...
- 转:Android开发中的MVP架构(最后链接资源不错)
Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...
- 转: Android开发中的MVP架构详解(附加链接比较不错)
转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...
- 浅谈Android架构之MVP,MVVM
概述 MVP(Model-View-Presenter)是传统MVC(Model-View-Controller)在Android开发上的一种变种.进化模式.主要用来隔离UI.UI逻辑和业务逻辑.数据 ...
- 设计模式笔记之二:Android开发中的MVP架构(转)
写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...
- mvp架构解析
MVP现在已经是目前最火的架构,很多的框架都是以MVP为基础,甚至于Google自己都出一个MVP的开源架构.https://github.com/googlesamples/android-arch ...
- 用户登录(Material Design + Data-Binding + MVP架构模式)实现
转载请注明出处: http://www.cnblogs.com/cnwutianhao/p/6772759.html MVP架构模式 大家都不陌生,Google 也给出过相应的参考 Sample, 但 ...
- MVP架构
一.介绍 MVP(Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.对于在Android应用中开发就可以视为是MVC架构,布局 ...
随机推荐
- Wijmo 5 + Ionic Framework之:费用跟踪 App
Wijmo 5 + Ionic Framework之:费用跟踪 App 费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mob ...
- C#将XML转换成JSON转换XML
原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...
- 使用JasperReport+iReport进行Web报表开发
使用JasperReport+iReport进行Web报表开发 前言 在实际工程中非常,报告是其中很重要的一部分,结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥有复杂表头的.多维 ...
- C#实现函数根据返回类型重载
一直以来都很奇怪为何C#不能直接支持函数返回值重载, 比如如下两个函数是编译不过的 Public Class DbHelper { Public Static int ExecuteScalar(); ...
- idea执行go
因为经常在不同的地方调代码,每次都调整环境很麻烦,于是在犯懒的时候发现了更直接简便的办法,关于idea集成go环境的,不需要按部就班的部署. 首先下代码,比如https://github.com/sa ...
- [转]网上看到的关于C中内存分配的描述
1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始 ...
- MVC应用程序请求密码的功能1
MVC应用程序请求密码的功能(一) 经过一系列的练习,实现了会员注册<MVC会员注册>http://www.cnblogs.com/insus/p/3439599.html,登录<M ...
- 【xcode插件介绍】Alcatraz ----The package manager for Xcode
对于许多iOS开发者而言,Alcatraz并不陌生,甚至是相当的喜闻乐见.Alcatraz是一款开源的Xcode包管理器,由Marin Usalj.Delisa Mason和Jurre Stender ...
- RDLC(Reportview)报表直接打印,支持所有浏览器,客户可在linux下浏览使用
最近在做一个打印清单的,但是rdlc报表自带的工具栏中的打印按钮只有在ie内核下的浏览器才可以使用(其他的就会 隐藏),这导致了使用火狐和谷歌浏览器还有使用linux系统的客户打印成了问题,于是就自己 ...
- formValidator
formValidator输入验证.异步验证实例 + licenseImage验证码插件实例应用 实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能 ...