本文主要根据Microsoft Word – MVP paper f2.doc (wildcrest.com)[1]文章(MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java,下面简写为《MVP paper》)的内容对MVP进行介绍,有关于MVC的内容可以查看MVC理解。
Model-View-Presenter
Taligent(IBM的子公司)在Smalltalk的经典MVC编程模型基础上开发了用于C++和Java的新的编程模型,称为Model-View-Presenter或MVP。
《MVP paper》中对MVC及MVP使用的是编程模型Programming Model,许多文章中使用的是模式Pattern,这里按照文章内容翻译为编程模型、MVC模型等。
Smalltalk编程模型
Smalltalk采用的MVC编程模型(1970年代后期在Xerox PARC开发的Model-View-Controller)如下。
-
model代表底层的数据,model状态改变时通知view,view重新进行绘制 -
view从model访问数据,并指定如何在屏幕绘制来自model的数据 -
controller以手势或事件的形式确定用户与view的交互如何导致模型中的数据发生改变
Taligent / Open Class 编程模型
Taligent对Smalltalk MVC编程模型进行了修改和推广,以表示任意交互式程序的整体结构。Taligent的整体方法是将基础MVC的概念分解为其组成部分,并进一步细化它们以帮助程序员开发更复杂的应用程序。
这个过程的第一步是将Model和View-Controller(Presentation)分离,这表示将编程问题分解为两个基础概念:数据管理Data Management和用户界面User Interface。这两个概念包含编程人员必须处理的两个更基本的设计问题。
-
对于数据管理:如何管理数据?(包括模型中的底层数据表示、数据结构、访问方法、修改协议、数据持久性等等) -
对于用户界面:用户如何与数据进行交互?(包括在屏幕绘制对象、鼠标键盘事件、语义操作、用户动作识别、手势语言、反馈等等)
三个数据管理问题
数据管理问题可以分解为三个子问题。
-
数据是什么?即model本身,相当于基本的MVC的model,具有封装的数据、读写访问方法等 -
如何指定数据?在model的数据中指定不同子集的抽象称为selections -
如何修改数据?表示可以对model中的selections执行的操作的抽象称为commands
三个用户界面问题
用户界面问题同样可以分解为三个子问题。
-
如何显示数据?即上面描述的view,可以有多个view,view不是必须可见的 -
事件如何映射为数据改变?这称为interactors。交互事件interactor event是指用户发起的动作(如鼠标移动和点击、键盘击键、或类似拨动开关的操作等等) -
如何整合所有对象?这代表经典MVC中的controller,但提高到了应用程序层面并考虑了中间的selection、command、及interactor的概念。为了体现这种区别,将这类controller称为presenter
考虑到整个编程模型的起源是MVC的一种通用形式,将其称为Model-View-Presenter或MVP。MVP中presenter的角色是解释用户发起的事件和手势,并提供将它们映射为合适的command的业务逻辑,以便以预期的方式来操作model。
MVP: Model-View-Presenter
总之,三个数据管理问题和三个用户界面问题构成了开发人员在创建完整的基于MVP的程序时回答的六个问题。
-
数据是什么?——Model -
如何指定数据?——Selections -
如何修改数据?——Commands -
如何显示数据?——View -
事件如何映射为数据改变?——Interactor -
如何整合所有对象?——Presenter
参考资料
Microsoft Word – MVP paper f2.doc (wildcrest.com): http://www.wildcrest.com/Potel/Portfolio/mvp.pdf
原文始发于微信公众号(技术知识小记):MVP介绍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/184917.html