大话MVP架构模式(1)-Basic

Model-view-presenter(MVP)是Model-view-controller(MVC)的派生,通常用于UI构建。在MVP中,presenter充当着“中间人”的功能。在MVP中,所有的表示逻辑都推给presenter。

model-view-presenter最早起源于90年代的Taligent——一个由Apple、IBM和Hewlett-Packard合资的企业。MVP是在Taligent基于C++的CommonPoint环境中开发应用的的底层编程模型。后来Taligent将这个模式移植到了java,随后又由Taligent的CTO Mike Potel在一篇论文中推广开来。

1998年(MVP在)Taligent(的发展)中断之后,Dolphin Smalltalk的Andy Bower和Blair McGlashan改编了MVP模式作为Smalltalk的UI框架的基础。2006年,Microsoft开始将MVP纳入其文档和示例中,用于.NET框架中的用户界面编程。

Martin Fowler和Derek Greer所写的一篇文章详细讨论了MVP模式的演化和多种变体,包括MVP与其他设计模式(如MVC)的关系。

概述

MVP是用户界面的架构模式,旨在促进自动化单元测试,并改善表达逻辑中的关注点分离(the separation of concerns)。

  • model是一个定义在用户界面中要展示或其他操作的数据的接口。
  • view是一个被动接口,它展示数据(the model),并将用户命令(事件)发送给presenter以根据该数据进行操作。
  • presenter对model和view进行操作.它从存储库(the model)中检索数据,并将其格式化以便在view中显示。

通常view的实现实例化具体的presenter对象,并向其(the presenter)提供自身(the view)的引用。下文中的C#代码演示了一个简单的view构造,这里ConcreteDomainPresenter实现了IDomainPresenter接口:

public class DomainView:IDomainView{
    private IDomainPresenter domainPresenter = null;

    public DomainView(){
        domainPresenter = new ConcreteDomainPresenter(this);
    }
}

view中能容许的逻辑度在不同的实现中是不同的。极端情况下,view是完全被动的,将所有的交互操作交给presenter.在这种构想中,当用户触发一个view的事件方法,它除了调用presenter的一个无参无返回值的方法外不做任何事,然后presenter通过view接口定义的方法从view中检索数据,最后presenter对model进行操作,使用交互结果更新view.

其他版本的model-view-presenter允许某个纬度对特定的交互、事件和命令进行处理。这通常更适合于基于Web的结构中,这种结构中,view在用户浏览器上执行,可能是处理交互命令的最佳场所。

从view的分层角度来看,presenter类可能属于多层结构系统中的应用层,但它也可视为它自己在应用层和用户界面层之间的展示层。

猜你喜欢

转载自blog.csdn.net/kevinscsdn/article/details/78841782