本文是翻译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来封装相同的远程数据,使得多个用户可以共享同一分数据.
        • 一个用户对数据的更改,所有人都能看到更新.能够多人同步地操作相同的数据.
  • 数据管理的3个问题
  • 用户界面的3个问题
    • Presenter.翻译用户发起的事件和指令,将其匹配到操作Model的对应Commond上.
  • MVP模式
  • MVP编程Framework
  • 抽象的优势
    • 区分Model/View.

      • View独立:同一份数据可以有不同的展示.
    • 区分Selection/Model.
      • Model独立:改变数据的结构时,不会影响数据的使用.同时支持持久化,远程数据库,和共享.
    • 区分Commond/Selection.
      • 命令重用:单个命令可以应用到对同一Model的单个,多个或者所有数据元素的Selection上.
    • 区分Interactor/View.
      • 输入通用化:在不改变程序逻辑或数据的渲染,可以支持不同的菜单,对话框.
    • 区分Presenter/Command-Interactor.
      • 逻辑重用:程序逻辑和算法从特定的显示显示和数据管理细节中抽象出来,可以在不同程序间重用.
    • 整体上.
      • 平台的可移植性.多标准,分布式,层次分割.

MVP演化论的更多相关文章

  1. 腾讯 Omi 5.0 发布 - Web 前端 MVVM 王者归来,mappingjs 强力加持

    写在前面 腾讯 Omi 框架正式发布 5.0,依然专注于 View,但是对 MVVM 架构更加友好的集成,彻底分离视图与业务逻辑的架构. 你可以通过 omi-cli 快速体验 MVVM: $ npm ...

  2. 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 的目的是 ...

  3. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  4. 谈谈UI架构设计的演化

    谈谈UI架构设计的演化 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Reenskaug在跟一些人的讨 ...

  5. 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean

    十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...

  6. Android上的MVP:如何组织显示层的内容

    MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一个演化版本,目前它在Android应用开发中越来越重要了,大家也都在讨论关于M ...

  7. mvc、mvp、mvvm使用关系总结

    MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法 ...

  8. Android -- 初探MVP模式

    1,相信大家对mvp模式都很熟悉了,M-Model-模型.V-View-视图.C-Controller-控制器.MVP作为MVC的版本演化,与MVC的意义类似:M-Model-模型.V-View-视图 ...

  9. 浅谈 MVP in Android

    一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等.本篇博文仅是为了做下记录,提出一些自己的看法,和帮 ...

随机推荐

  1. Markdown 常用语法总结

    注意:Markdown使用#.+.*等符号来标记,符号后面必须跟上至少跟上 1个空格才有效! Markdown的常用语法 标题 Markdown标题支持两种形式. 1.用#标记 在标题开头加上1~6个 ...

  2. BZOJ 5466: [Noip2018]保卫王国 动态DP

    Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> #define ll long long #define lson (now ...

  3. Clocksource tsc unstable

    内核在启动过程中会根据既定的优先级选择时钟源.优先级的排序根据时钟的精度与访问速度. 其中CPU中的TSC寄存器是精度最高(与CPU最高主频等同),访问速度最快(只需一条指令,一个时钟周期)的时钟源, ...

  4. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺 Scrum meeting 4

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11012922.html 团队名称 奋斗吧!菜鸟 作业学习目标 A ...

  5. Spring Boot-全局异常处理(八)

    SpringBoot默认异常默认处理机制 Spring boot错误异常时通过BasicErrorController来处理的 通过判断是浏览器请求还是ajax请求响应页面或者json BasicEr ...

  6. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...

  7. SpringBoot支持AJAX跨域请求

    利用注解的方式解决AJAX请求跨域问题 1.编写一个支持跨域请求的 Configuration - 第一种方式 - CorsConfig.java import org.springframework ...

  8. windows下本地安装oracle忘记密码,账号被锁咋办

    忘记密码咋办: 进入cmd,输入set ORACLE_SID=ymxg  (ORACLE_SID的值为你想登录的oracle实例的SID) 然后输入:sqlplus / as sysdba 最后输入: ...

  9. IOS - 查找未使用的图片

    实现细节都在代码里面, 帮助 -h. # -*- coding: utf-8 -*- """ 检查IOS应用图片是否使用 1. 读取有效文件: 图片(.png, .jpg ...

  10. swift 笔记 (十四) —— 构造过程

    构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...