MVP演化论
本文是翻译MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(Mike Potel)文章的摘要.该文介绍了从MVC到MVP的思想演化过程.
- SmallTalk编程模型
- 在该项目中,使用了MVC来实现GUI(graphical user interface)对象.

- 使用3个抽象来代表一个GUI对象(checkbox/textbox).
- Model.代表对象对应的底层数据.(checkBox的on-off状态).
- View.访问Model中的数据,并完成数据的UI展示.
- Controller.决定用户在View上的交互动作,如何反映到Model中的数据变化.
- 最后,Model会通知View,数据状态发生了变化,需要View重绘.整个流程结束.
- 然后,通过继承和自定义基础的model,view,controller基类,来创建GUI对象.
- 在一个GUI对象中,含有3个紧密关联的部分.
- 一个复杂元素,可能会含有多个继承类.
- 整个交互程序都使用MVC来构建.
- Taligent编程模型
- 目标是分解MVC的概念到各个组成部分.
- 首先,分离了Model和View-Controller.后者成为Presenter.
- 这样,将问题分解为两块:数据管理(Data Management)和用户界面(User Interface).

- 数据管理.不仅包含了在Model中的数据表现,还包含了数据结构,访问方法,交换协议,持久化,共享,分布性等.
- 用户界面.不仅包含了如何在屏幕上绘制对象和鼠标键盘事件,还包含了什么操作是被允许的,会有什么样的反馈,如何辨别用户操作.
- 好处
- Model被封装,隔离了与View-Controller的关联.
- 当替换Model中的数据结构时,仍然可以保持既有的Presenter逻辑.
- 针对同一份Model,可以有多份Presenter进行展示.这样便于并行开发.
- 避免在修改数据Model时,需要同步修正使用Model的代码.
- Model支持持久化.
- 由Model自身来决定Model中的数据的存储方式.
- 可以自己将数据保存在内存中,可以通过proxy来访问数据库,可以使用Cache机制...
- 而这一切,对于上层的Presenter是完全透明的.
- Model支持共享
- 使用不同的Model来封装相同的远程数据,使得多个用户可以共享同一分数据.
- 一个用户对数据的更改,所有人都能看到更新.能够多人同步地操作相同的数据.
- Model被封装,隔离了与View-Controller的关联.
- 数据管理的3个问题
- 用户界面的3个问题

- Presenter.翻译用户发起的事件和指令,将其匹配到操作Model的对应Commond上.
- MVP模式
- MVP编程Framework
- 抽象的优势
- 区分Model/View.
- View独立:同一份数据可以有不同的展示.
- 区分Selection/Model.
- Model独立:改变数据的结构时,不会影响数据的使用.同时支持持久化,远程数据库,和共享.
- 区分Commond/Selection.
- 命令重用:单个命令可以应用到对同一Model的单个,多个或者所有数据元素的Selection上.
- 区分Interactor/View.
- 输入通用化:在不改变程序逻辑或数据的渲染,可以支持不同的菜单,对话框.
- 区分Presenter/Command-Interactor.
- 逻辑重用:程序逻辑和算法从特定的显示显示和数据管理细节中抽象出来,可以在不同程序间重用.
- 整体上.
- 平台的可移植性.多标准,分布式,层次分割.
- 区分Model/View.
MVP演化论的更多相关文章
- 腾讯 Omi 5.0 发布 - Web 前端 MVVM 王者归来,mappingjs 强力加持
写在前面 腾讯 Omi 框架正式发布 5.0,依然专注于 View,但是对 MVVM 架构更加友好的集成,彻底分离视图与业务逻辑的架构. 你可以通过 omi-cli 快速体验 MVVM: $ npm ...
- MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录
注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- 谈谈UI架构设计的演化
谈谈UI架构设计的演化 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Reenskaug在跟一些人的讨 ...
- 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
- Android上的MVP:如何组织显示层的内容
MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一个演化版本,目前它在Android应用开发中越来越重要了,大家也都在讨论关于M ...
- mvc、mvp、mvvm使用关系总结
MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法 ...
- Android -- 初探MVP模式
1,相信大家对mvp模式都很熟悉了,M-Model-模型.V-View-视图.C-Controller-控制器.MVP作为MVC的版本演化,与MVC的意义类似:M-Model-模型.V-View-视图 ...
- 浅谈 MVP in Android
一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等.本篇博文仅是为了做下记录,提出一些自己的看法,和帮 ...
随机推荐
- html 底部虚线
<div style="width: 100%; font-size: 14px; color: #666; border-bottom: 1px dashed #666;" ...
- php常用字符串和例子
//输出一个或多个字符串 //注:echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以 $a = "admin1"; $b = & ...
- Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码
先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...
- 【udacity】机器学习-knn最近邻算法
Evernote Export 1.基于实例的学习介绍 不同级别的学习,去除所有的数据点(xi,yi),然后放入一个数据库中,下次直接提取数据 但是这样的实现方法将不能进行泛化,这种方式只能简单的 ...
- centos6.5 安装redis自动启动
1.安装需要的支持环境 在安装Redis之前首要先做的是安装Unix的 Tcl工具 ,如果不安装的话后期将无法对Redis进行测试.在后期执行make test的时候返回如下错误信息: You nee ...
- Java 8 集合不完全一览
JDK 8 List 名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注 ArrayList 不安全 数组 允许 10 1.5 * old LinkedList 不安全 双链表 允 ...
- 一步一步实现基于GPU的pathtracer(二):求交算法
不管是哪种全局光照算法,最根本的都要落实到光线与物体的求交.主要分为光线与参数曲面和非参数曲面的求交,典型的参数曲面有球.盒.圆柱等基本体及基本体的组合体,以及一些更为复杂的参数曲面.非参数曲面就是所 ...
- 为类型定义取别名、环境变量、静态库与动态库(day03)
一.为类型命名别名 struct node{ int num; struct node *next; }; typedef struct node node_t; node_t n; 使用typede ...
- jQuery cxCalendar 日期选择器
简介 cxCalendar 是基于 jQuery 的日期选择器插件. 它灵活自由,你可以自定义外观,日期的范围,返回的格式等. 版本: jQuery v1.7+ jQuery cxCalendar v ...
- HDU 4359 Easy Tree DP?
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...



