在Java平台,基于Spring等技术的MVC框架已经走向成熟;在.NET平台,微软也推出了MVC、MVP Framework,MVP不同于MVC的地方,关键在于,View不再显示的依赖于Business Logic Controller,而是依赖于一个业务逻辑抽象接口,关注于View的解藕。所以区分MVP与MVC的关键在于View是否依赖于某一具体的业务对象。
Model View Presenter vs Model View Controller
在N层体系结构中MVC/P模式仅仅只是用于表示层(presentation layer),理解这一点很重要。这两个模式并不是关于怎么构建数据层(data layer)和服务层(service layer)的,而是关于怎么将数据(data)从用户接口(view)中分离出来,以及用户接口如何与数据进行交互的。这些模式的使用解除了你的程序中表示层对数据和控制逻辑的依赖,从而可以自由的变更表示层。
MVC(Model View Controller)模式处理过程
为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件
用户通过视图(用户接口)执行一些操作
控制器处理用户行为(可以用观察着模式实现)并通知模型进行更新
模型引发一些事件,以便将改变发告知视图
视图处理模型变更的事件,然后显示新的模型数据
用户接口等待用户的进一步操作
这一模式的有以下几个要点:
视图并不使用控制器去更新模型。控制器负责处理从视图发送过来的用户操作并通过与模型的交互进行数据的更新
控制器可以和视图融合在一块。Visual Studio.NET中对Windows Forms的默认处理方式就是这样的。
【译注