`
isiqi
  • 浏览: 16497433 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

mvc与mvp的区别-life is beautiful-搜狐博客

阅读更多

标签: c#

贴到这里,怕以后找不到了。如果有用到c#的可以看看,挺有用的。

Alex在他的blog中对于mvc 与mvp 之间的比较:

【译文】:

Model View Presenter vs Model View Controller
简介

在我工作中经常需要处理一些由于开发人员没能很清楚地理解MVCMVP模式的区别的情况下使用它们而产生的问题。在这篇文章中我将会阐述一下我对两者之间区别的一些理解。
在N层体系结构中MVC/P模式仅仅只是用于表示层(presentation layer),理解这一点很重要。这两个模式并不是关于怎么构建数据层(data layer)和服务层(service layer)的,而是关于怎么将数据(data)从用户接口(view)中分离出来,以及用户接口如何与数据进行交互的。这些模式的使用让解除你的程序中表示层对对数据和控制逻辑的依赖,从而可以自由的变更表示层。

这两种模式中三个部分的一般理解

1、模型(Model)表示数据模型和业务逻辑(business logic)。模型并不总是DataSet,DataTable之类的东西,它代表着一类组件(components)或类(class),这些组件或类可以向外部提供数据,同时也能从外部获取数据并将这些数据存储在某个地方。简单的理解,可以把模型想象成“外观类(facade class)”。【译注:这里的外观是指“外观模式”中所说的外观。外观的一般作用是为一个复杂的子系统提供高层次的简单易用的访问接口,可以参看下面的图来理解它的原理:


2、视图(View)将数据层现给用户。一般的视图都只是包含用户界面(UI),而不包含界面逻辑。比如,Asp.net中包含控件的页面(page)就是一个视图。视图可以从模型中读取数据,但是不能修改或更新模型。
3、层现器(Presenter)/控制器(Controller)包含了根据用户在视图中的行为去更新模型的逻辑。视图仅仅只是将用户的行为告知控制器,而控制器负责从视图中取得数据然后发送给模型。

MVC/P模式的核心是为了将模型从视图/控制器中分离出来,从而使得模型独立于它们,因此模型不包含对视图和控制的引用。

什么是MVC(Model View Presenter)模式?

1、为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件
2、用户通过视图(用户接口)执行一些操作
3、控制器处理用户行为(可以用观察着模式实现)并通知模型进行更新
4、模型引发一些事件,以便将改变发告知视图
5、视图处理模型变更的事件,然后显示新的模型数据
6、用户接口等待用户的进一步操作

这一模式的有一下几个要点:
1、视图并不使用控制器去更新模型。控制器负责处理从视图发送过来的用户操作并通过与模型的交互进行数据的更新
2、控制器可以和视图融合在一块。Visual Studion中对Windows Forms的默认处理方式就是这样的。【译注:比如我们双击一个Button,然后在它的事件里写处理逻辑,然后将处理的数据写回模型中。这里处理逻辑时间应该是控制器的功能,但是我们并没有专门写一个控制器来做这件事情而是接受了VS的默认处理方式,将它写在Form的代码中,而这里的Form在MVC中它就是一个View。所以这说vs默认的处理方式是将把控制器和视图融合在一起的。】
3、控制器不包含对视图的渲染逻辑(rendering logic)

“主动—MVC”模式,也是通常意义下的MVC模式

【译注:为什么说是主动的?View不是等Controller通知它Model更新了然后才从Model取数据并更新显示,而是自己监视Model的更新(如果用观察者模式)或主动询问Model是否更新。前面那种等待Controller通知的方式是下面所介绍的“被动—MVC”的实现方式。】

“被动—MVC”模式
与主动MVC的区别在于:
1、模型对视图和控制器一无所知,它仅仅是被它们使用
2、控制器使用视图,并通知它更新数据显示
3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新)
4、控制器负责处理模型数据的变化
5、控制器可以包含对视图的渲染逻辑

MVP模式

与“被动—MVC模式”很接近,区别在于“视图并不使用模型”。在MVP模式中视图和模型是完全分离的,他们通过Presenter进行交互。
Presenter与控制器非常相似,但是它们也有一些的区别:
1、Presenter处理视图发送过来的用户操作(在MVC中视图自己处理了这些操作)
2、它用更新过的数据去更新模型(在被动MVC中控制器只是通知视图去更新过的模型中去取新的数据,而主动MVC中模型通知视图去更新显示,控制器不需要做工作)
3、检查模型的更新(与被动MVC一样)
4、(与MVC的主要区别)从模型中取数据然后将它们发送到视图中
5、(与MVC的主要区别)将所做的更新告知视图
6、(与MVC的区别)用Presenter渲染视图

MVP的优势

1、模型与视图完全分离,我们可以修改视图而不影响模型
2、可以更高效地使用模型,因为所以的交互都发生在一个地方——Presenter内部
3、我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

MVP的问题

由于对视图的渲染放在了Presenter中,所以视图和Persenter的交互会过于频繁。

还有一点你需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。

mvc与mvp的区别-life is beautiful-搜狐博客

分享到:
评论

相关推荐

    sentinel-spring-webmvc-adapter-1.8.0-API文档-中文版.zip

    赠送jar包:sentinel-spring-webmvc-adapter-1.8.0.jar; 赠送原API文档:sentinel-spring-webmvc-adapter-1.8.0-javadoc.jar; 赠送源代码:sentinel-spring-webmvc-adapter-1.8.0-sources.jar; 赠送Maven依赖信息...

    sentinel-spring-webmvc-adapter-1.8.0-API文档-中英对照版.zip

    赠送jar包:sentinel-spring-webmvc-adapter-1.8.0.jar; 赠送原API文档:sentinel-spring-webmvc-adapter-1.8.0-javadoc.jar; 赠送源代码:sentinel-spring-webmvc-adapter-1.8.0-sources.jar; 赠送Maven依赖信息...

    MVC_MVP_MVVM_demos

    - **Model**:仍然负责数据和业务逻辑,与MVC和MVP相同。 - **View**:显示用户界面,但不直接操作Model。通过数据绑定,View的变化会自动反映到ViewModel,反之亦然。 - **ViewModel**:作为View和Model之间的中间...

    MVC和MVP深度对比

    **MVC(Model-View-Controller)和MVP(Model-...综上所述,MVC和MVP都是为了实现业务逻辑与用户界面的分离,但在具体实现和优势上有所不同。选择哪种模式取决于项目的规模、团队的偏好以及对测试和可维护性的需求。

    MVC和MVP的区别

    **MVC与MVP的主要区别:** 1. **职责分配**:在MVC中,Controller对视图和模型都有直接操作,而在MVP中,Presenter负责所有视图和模型的交互,使得Presenter更易于测试和复用。 2. **耦合度**:MVP通常被认为比MVC有...

    springfox-spring-webmvc-3.0.0-API文档-中文版.zip

    赠送jar包:springfox-spring-webmvc-3.0.0.jar; 赠送原API文档:springfox-spring-webmvc-3.0.0-javadoc.jar; 赠送源代码:springfox-spring-webmvc-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-...

    Spring MVC step-by-step 源码

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。它基于Spring框架,提供了模型-视图-控制器(MVC)架构,简化了开发过程。本资源"Spring MVC step-by-step 源码"是针对初学者准备的...

    Android mvc、mvp、mvvm示例

    在Android应用开发中,模型-视图-控制器(MVC)、模型-视图- presenter(MVP)和模型-视图-ViewModel(MVVM)是常见的设计模式,用于组织代码结构,提高可维护性和可测试性。让我们逐一深入探讨这三种架构模式。 ##...

    MVC、MVP和MVVM

    在MVP中,Presenter取代了Controller,它直接与Model交互并处理业务逻辑,同时与View建立接口,确保View的更新。Presenter使得逻辑更集中,提高了测试性,但可能导致大量接口和回调,增加代码复杂性。 然后是**MVVM...

    MVPDemo-master.zip

    - **MVC(Model-View-Controller)**:相比MVP,Controller在MVC中承担了更多的职责,包括数据绑定和业务逻辑,这可能导致Controller变得庞大且难以管理。 - **MVVM(Model-View-ViewModel)**:MVVM模式在Android中...

    springfox-spring-webmvc-3.0.0-API文档-中英对照版.zip

    赠送jar包:springfox-spring-webmvc-3.0.0.jar; 赠送原API文档:springfox-spring-webmvc-3.0.0-javadoc.jar; 赠送源代码:springfox-spring-webmvc-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-...

    SpringMVC源码总结(三)mvc:annotation-driven和mvc:message-converters简单介绍

    在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...

    浅谈三大模式(mvc,mvp,mvvm)

    本文将深入探讨三种常见的设计模式:Model-View-Controller(MVC)、Model-View-Presenter(MVP)和Model-View-ViewModel(MVVM)。这些模式在构建用户界面时起着至关重要的作用,尤其是在Web和移动应用开发中。 ...

    移动端MVC-MVP架构简单示例

    "移动端MVC-MVP架构简单示例"是一个很好的学习资源,它涵盖了两种常见的Android应用程序架构模式:Model-View-Controller (MVC) 和 Model-View-Presenter (MVP)。 **MVC架构** MVC是一种经典的软件设计模式,它将...

    puremvc-js-multicore-framework-master

    《PureMVC JavaScript 多核框架详解》 PureMVC 是一个轻量级的、模型-视图-控制器(Model-View-Controller)框架,它最初是为Flash平台设计的,但随着时间的发展,已被移植到多种编程语言中,包括JavaScript。在本...

    spring-webmvc-5.3.10-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.3.10.jar; 赠送原API文档:spring-webmvc-5.3.10-javadoc.jar; 赠送源代码:spring-webmvc-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.3.10.pom; 包含翻译后的API...

    MVC5-Angle-seed

    标题"MVC5-Angle-seed"表明这是一个基于ASP.NET MVC5框架,并且使用AngularJS作为前端MVVM(Model-View-ViewModel)库的项目种子。这个项目可能是为了快速搭建一个Web应用程序的基础架构,方便开发者在此基础上进行...

    spring-webmvc-portlet-3.2.7.RELEASE.jar

    spring-webmvc-portlet-3.2.7.RELEASE.jarspring-webmvc-portlet-3.2.7.RELEASE.jarspring-webmvc-portlet-3.2.7.RELEASE.jarspring-webmvc-portlet-3.2.7.RELEASE.jar

    spring-webmvc-5.3.15-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.3.15.jar; 赠送原API文档:spring-webmvc-5.3.15-javadoc.jar; 赠送源代码:spring-webmvc-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.3.15.pom; 包含翻译后的API...

    mvc-mvp-mvvm:javascript简单实现mvc mvp mvvm

    在软件开发领域,模型-视图-控制器(MVC)、模型-视图- presenter(MVP)和模型-视图-ViewModel(MVVM)是三种常见的设计模式,尤其是在JavaScript开发中广泛使用。这些模式主要用于分离应用程序的业务逻辑、数据...

Global site tag (gtag.js) - Google Analytics