mvp架构。。。。

author author     2022-08-12     374

关键词:

Model-View-Presenter(MVP)概述
    
MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成为.NET社区的热名话题。作为MVC的变种MVP模式,也已经出现好几年了,在微软模式与实践小组提供的Web Client Software Factory中,给出了实现MVP模式的应用程序最佳实践,本文将试着对这两种实现比较一二。
MVC(Model-View-Controller,模型-视图-控制器)模式是80年代Smalltalk-80出现的一种软件设计模式,后来得到了广泛的应用,其主要目的在于促进应用中模型,视图,控制器间的关注的清晰分离。MVP(Model-View-Presenter,模型-视图-表示器)模式则是由IBM开发出来的一个针对C++和Java的编程模型,大概出现于2000年,是MVC模式的一个变种,主要用来隔离UI、UI逻辑和业务逻辑、数据。在下面的文字中,如无特别说明,MVC均指ASP.NET MVC Framework。

Model-View-Presenter(MVP)优缺点
    
针对ASP.NET MVP Sample实例,在这个实例中MVP模式采用了Castle框架和底层数据映射NHibernate框架,在开发过程中要注意NHibernate的版本的不同,有的支持sql server 2000,有的支持sql server 2005数据库。IHttpModule接口的实现。其实在使用Castle框架时,IContainerAccessor接口已经封装了IoC模式。还有泛型编程。事务回滚操作。在编程过程中,你可以保留它现有的模式,也可以增加或改变其模式。
    Model-view-presenter旨在应用程序分层和提高测试效率,它的主要目标是将显示逻辑与业务逻辑分离,正如我们设计面向对象程序中创建松散耦合并可重用的对象。
    MVP的另一个目标是提高针对View的测试效率。编写依赖Session, ViewState, AJAX, HTML或web控件和业务实体的单元测试类较为复杂,因此我们将各视图的显示逻辑保留在ASPX/ASCX文件类中,并将业务逻辑从中分离出来放在相应的类中,在MVP中Presenter充当视图和业务逻辑的缓冲层。

  技术分享 

MVPMVC的区别
    
MVP——Model-View-Presenter 它是MVC模式的变种。UI是容易变化的,且是多样的,一样的数据会有N种显示方式;业务逻辑也是比较容易变化的。为了使得Application具有较大的弹性,我们期望将UI、逻辑(UI的逻辑和业务逻辑)和数据隔离开来,而MVP是一个很好的选择。
    Presenter代替了Controller,它比Controller担当更多的任务,也更加复杂。Presenter处理事件,执行相应的逻辑,这些逻辑映射到Model的Command以操作Model。那些处理UI如何工作的代码基本上都位于Presenter。Presenter如同一个乐队的指挥家,表现和协调整个Application,它负责创建和协调其它对象。
    Model和View使用Observer模式进行沟通;而Presenter和View则使用Mediator模式进行通信;Presenter操作Model则使用Command模式来进行。基本设计和MVC相同:Model存储数据,View表示Model的表现,Presenter协调两者之间的通信。在 MVP 中 View 接收到事件,然后会将它们传递到 Presenter, 如何具体处理这些事件,将由 Presenter 来完成。

技术分享

 

图1:Model-View-Controller

 技术分享

 

图2:Model-View-Presenter
处理流程方面,在MVC中,用户的请求首先会到达Controller,有Controller从Model获取数据,选择合适的View,把处理结果呈现到View上;在MVP中,用户的请求首先会到达View,View传递请求到特定的Presenter,Presenter从Model获取数据后,再把处理结果通过接口传递到View。
使用MVP后,我们可以提高对Model和Presenter的复用,比如可以对Model和Presenter不做修改,而能提供ASP.NET Web Form和 Windows Form。
在ASP.NET MVC Framework中,采用行内代码进行数据呈现,逻辑集中在Controller中,但是View无法完全交给UI设计人员完成。在MVP模式中,所有的业务逻辑交给Presenter去处理,这样View中代码就变得及其简洁,将可以轻易的把开发人员和UI设计人员分开,如下图所示:

 

 技术分享

MVP实例讲解
  
下面看一个简单的例子:
  该方式将创建Presenter,传递View和model,调用“InitView”方法的功能交给ASCX用户控件(View)处理。View应用相应的Presenter,Presenter只知道View的接口。ASPX页只用于添加用户控件,因此只需要将用户控件拖拽到页面上可以很容易的重用。

public class Presenter
{
    public Presenter(IView view, IModel model)
     {        
        this.view = view;
        this.model = model;
    }

    public void InitView(bool isPostBack)
     {
        if(!isPostBack)
         {
            view.SetProducts(model.GetProducts());
        }
    }
    
    public void SaveProducts(IList<IProduct> products)
     {
        model.SaveProducts(products);
    }
}

//页面或用户控件CS代码
protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    presenter = new Presenter(this,model);
    presenter.InitView(Page.IsPostBack);
}

public void SetProducts(IList<IProduct> products)
{
    //bind products to view
}

//视图接口
public interface IView
{
    void SetProducts(IList<IProduct> products);
}

通过上面的代码就可以了解到MVP的结构是什么样的,可根据这种模式来开发你的项目。当然你也可以从codeplex网站上下载一个Demo,进一步理解。希望这篇文章能对大家有用。

企业级MVP架构的应用
  
在企业级ASP.NET应用中使用MVP 
1、使用用户控件封装Views:这个主题讨论用户控件作为MVP中的View。
2、MVP的事件处理:这个主题讨论连同页面验证传递事件到Presenter,IsPostBack和将消息传递到View。
3、MVP和PageMethods的页面重定向:这个主题讨论使用用户控件作为View,如何使用PageMethods处理页面重定向。
4、MVP的Presentation安全控制:这个主题讨论如何根据基本的安全限制显示/掩藏View中的区段。
5、使用MVP的应用的架构(高级):这是个重点,这个主题展示一个使用Nhibernate作为数据访问层的MVP应用。

 Codeplex网站上的那个例子,含概的内容不少,大家可以下载下来分析。

MVP工作感言
 
   这次写这篇文章,主要是解读MVP框架,针对微软MVP的一个例子讲解所涉及到的一些应用模式。最近公司项目采用了MVP架构来开发,对我来说有颇多收获和感慨。对于MVP模式来开发,应当算是新的架构,因为之前只知道微软MVP(Microsoft Most Valuable Professional),并不知道MVP(Model-View-Presenter)。自从来到博客园里不断学习,不断借鉴,丰富了自己的知识。在此要感谢drummeryξ箫音ξ两位老师的文章,同时也借鉴了UML软件工程组织网站的文章。MVP模式开发项目,我想未来几年将会越来越被许多人使用开发项目。在这里的MVP,我想同样应该实用于开发Windows软件项目。这篇文章写的比较仓促,难免有误之处,同时我也在不断的挖掘MVP的更深层次的应用。在这里这是我个人的理解,希望高人点评指点,若您有其他的理解,可以与我共同探讨。希望大家一起学习,共同进步。



























































mvp架构。。。。

Model-View-Presenter(MVP)概述    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NETMVCFramework的出现,致使MVC一度成为.NET社区的热名话题。作为MVC的变种MVP模式,也已经出现好几年了,在微软... 查看详情

mvp架构模式

        今天是国庆节,祝大家节日快乐,愿祖国越发繁荣昌盛。假期程序员也不能偷懒,更新一些博文吧。        看到封面图片喜欢NBA的人可能很容易就想到了最有价值... 查看详情

MVC和MVP架构之间的区别[重复]

】MVC和MVP架构之间的区别[重复]【英文标题】:DifferencebetweenMVC&MVParchitecture[duplicate]【发布时间】:2011-08-1510:44:54【问题描述】:可能重复:WhatareMVPandMVCandwhatisthedifference?我不了解MVC和MVP编码设计流程。我需要了解编码方面的... 查看详情

高级mvp架构封装演变全过程(代码片段)

...了解MVP请自行查阅资料,本文重点是封装一个高级MVP架构,会详细的讲解如何一步步从无到有的封装成一个高级MVP架构过程。众所周知普通的MVP模式存在内存泄露、代码冗余、界面意外关闭后在重建数据缓存等问题,... 查看详情

mvp架构的一个小例子

主角:MVP是一种编程的架构模式,M=Model,负责提供数据;V=View,负责显示数据;P=Presenter,负责处理数据。 应用例子:csharp写的一个qq机器人。一、Model层获取消息发送消息二、Presenter层监听消息处理消息三、View层好友消息... 查看详情

开发架构模式

一、开发架构有MVC、MVP、MVVM、等1.1MVC架构介绍是古老的架构,随着MVP与MVVM的流行渐渐退出历史舞台架构图案如下:MVC架构解析:1.视图层(View)2.控制层(Controller),主要负责业务逻辑3.模型层(Model),主要负责网络请求,数据库处理... 查看详情

清洁架构与 MVPC/MVC/MVP [关闭]

】清洁架构与MVPC/MVC/MVP[关闭]【英文标题】:CleanArchitectureVsMVPC/MVC/MVP[closed]【发布时间】:2017-02-2202:13:47【问题描述】:我正在研究UncleBobCleanArchitecture,并试图在我的IOS/Android项目中使用女巫设计模式的许多不同方面进行比较。... 查看详情

我实践中的mvp架构

我实践中的mvp架构在Android开发实践中,我也深刻理解到一个项目的架构稀烂会带来什么,成天的找bug,解决了一个bug,又出现了两个bug,这样的事肯定会经常出现。所以呢我决定使用传说中的mvp,这是15年... 查看详情

用户登录(materialdesign+data-binding+mvp架构模式)实现

...nbsp;http://www.cnblogs.com/cnwutianhao/p/6772759.html   MVP架构模式大家都不陌生,Google也给出过相应的参考Sample, 但是有的人会有疑问为啥GitHub上面大神写的MVP架构模式和Google的不太一样。 GoogleMVP架构模式Sample地址& 查看详情

在颤振中使用 MVP 架构的 Chopper

】在颤振中使用MVP架构的Chopper【英文标题】:ChopperusingMVPArchitectureinflutter【发布时间】:2020-06-0106:59:39【问题描述】:我正在使用Chopper调用api,我想得到结果json,这是我要调用的API[https://api.jsonbin.io/b/5e1219328d761771cc8b9394]我想问... 查看详情

具有 MVP 架构的 Mockito retrofit2

】具有MVP架构的Mockitoretrofit2【英文标题】:Mockitoretrofit2withMVParchitecture【发布时间】:2019-02-1105:30:49【问题描述】:我认为我在TeamImplsTest中的代码有问题,我需要建议:D这是我的代码API接口interfaceAPI@GET("lookupteam.php")fungetTeam(@Query... 查看详情

androidapp的设计架构:mvc,mvp,mvvm与架构经验谈

AndroidApp的设计架构由David发表在天码营和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构如何设计:我的App需要应用这些设计架构吗?MVC,MVP等架构讲的是什么?... 查看详情

高级mvp架构封装演变全过程(代码片段)

...了解MVP请自行查阅资料,本文重点是封装一个高级MVP架构,会详细的讲解如何一步步从无到有的封装成一个高级MVP架构过程。众所周知普通的MVP模式存在内存泄露、代码冗余、界面意外关闭后在重建数据缓存等问题,... 查看详情

mvp-浅析如何高效的使用mvp

...址:http://blog.csdn.net/dantestones/article/details/51445208Androidmvp架构的自述中我简单的介绍了mvp,以及怎么写mvp。我自己也将mvp运用到了项目中,其实mvp并没有固定的写法,正确的去理解架构的思想,都可以有自己独特的mvp写法。git上... 查看详情

Android MVP 架构 - 存储库和视图之间的通信

】AndroidMVP架构-存储库和视图之间的通信【英文标题】:AndroidMVParchitecture-communicationbetweenrepositoryandview【发布时间】:2017-05-1219:38:16【问题描述】:我正在学习给定here的AndroidMVP架构。根据示例,我创建了自己的简单应用程序,... 查看详情

readhub项目kotlin版开发指南(mvp架构)(代码片段)

...二、数据库和网络请求)ReadHub项目Kotlin版转换指南(三、MVP架构)Android开发中的MVP架构相信大家都已经熟悉,不熟悉的请右转Google,ReadHub项目从Java转换成Kotlin过程中,我们需要一套新的架构方式来实现(Kotlin项目中没有使用dagger2... 查看详情

android开发架构模式mvp的简单思考(代码片段)

转载请注明出处:http://blog.csdn.net/yianemail/article/details/49365223什么是MVP?   View层主要是用于展示数据并对用户行为做出反馈。在Android平台上,他可以对应为Activity,Fragment,View或者对话框。Model是数据访问层,往往... 查看详情

base封装--我的最简mvp架构

绪论最近懒癌症犯了,好久都没写博客了,当然也在做一些东西,也在整理自己一直以来使用的一些技术点,从Retrofit到OkGO,从ListView到RecycleView,从Java到Kotlin….总之一直在尝试新的技术,今天分享一... 查看详情