• 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来封装相同的远程数据,使得多个用户可以共享同一分数据.
          • 一个用户对数据的更改,所有人都能看到更新.能够多人同步地操作相同的数据.
    • 数据管理的3个问题
    • 用户界面的3个问题
      • Presenter.翻译用户发起的事件和指令,将其匹配到操作Model的对应Commond上.
    • MVP模式
    • MVP编程Framework
    • 抽象的优势
      • 区分Model/View.
        • View独立:同一份数据可以有不同的展示.
      • 区分Selection/Model.
        • Model独立:改变数据的结构时,不会影响数据的使用.同时支持持久化,远程数据库,和共享.
      • 区分Commond/Selection.
        • 命令重用:单个命令可以应用到对同一Model的单个,多个或者所有数据元素的Selection上.
      • 区分Interactor/View.
        • 输入通用化:在不改变程序逻辑或数据的渲染,可以支持不同的菜单,对话框.
      • 区分Presenter/Command-Interactor.
        • 逻辑重用:程序逻辑和算法从特定的显示显示和数据管理细节中抽象出来,可以在不同程序间重用.
      • 整体上.
        • 平台的可移植性.多标准,分布式,层次分割.
  • 相关阅读:
    关于字符编码
    cocosbuilder中使用字体描边时,字符重叠,间距过小问题
    2dx关于js响应layer触摸消息的bug
    关于js-binding中Layer触摸事件的优化
    2dx解析cocosbuilder中使用layer时的缺陷
    关于 2dx v3.7 UIScale9Sprite的bug
    c++11 Chrono时间库
    cocos2d-x lua table数据存储
    cocos2d-x lua 使用ListView
    Oracle数据库impdp时ora-00439:未启用功能:Deferred Segment Creation
  • 原文地址:https://www.cnblogs.com/robyn/p/3799344.html
Copyright © 2020-2023  润新知