1 简介mvp模式

1   模型-视图-表示器也称为监视控制器模式 ,如下图表示

2 mvp 模式希望通过表示器(presenter)来关联网页,而不必在他们之间建立严格的

3 一个简单的mvp架构的例子

 public partial class Default : System.Web.UI.Page
    {
        //表示器干了所有的事情
        public IPresent<GuestResponse> presenter { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            //创建具体的表示器
            presenter = new RSVPPresenter { repository=new MemoryRepository()};
            if (IsPostBack)
            {
                //得到一个模型
               GuestResponse rsvp= ((DataResult<GuestResponse>)presenter.GetResult()).DataItem;

                if (TryUpdateModel(rsvp,new FormValueProvider(ModelBindingExecutionContext)))
                {
                    Response.Redirect(((RedirectResult)presenter.GetResult(rsvp)).Url);
                }
            }
        }
    }

当web窗体提交时我们先初始化一个具体的表示器实例,并把这个实例要处理的模型与它具体的模型类关联起来,看起来是吧web窗体的请求全部交给表示器presenter来处理,实际上这还是一种硬编码。

4 如何隔离这些硬编码呢?使用依赖注入来隔离这些组件,也称为控制反转

使用DI容器:这是一个软件组件负责在需要时实例化实现类

以ninject为例,首先通过nuget安装ninject.web程序包

安装成功之后的效果

将依赖注入的配置信息存放到单独的类中

  public static class DIConfiguration
    {
        public static void SetupDI(IKernel kernel)
        {
            //告诉ninject收到IPresent<GuestResponse>>接口的请求时使用RSVPPresenter类
            //bind方法返回的对象可以将RSVPPresenter关联为要使用的实现
            //每次收到一个IPresent<GuestResponse>>的请求,就创建RSVPPresenter的一个新的实例
            kernel.Bind<IPresent<GuestResponse>>().To<RSVPPresenter>();

            //告诉ninject它应使用MemoryRepository的单一实例来响应IRepository接口的所有请求
            kernel.Bind<IRepository>().To<MemoryRepository>().InSingletonScope();
        }

    }

然后注册:

    /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            DIConfiguration.SetupDI(kernel);
        }        

配置:

        //当ninject在类中遇到inject特性时,Ninject知道需要创建指定的IRepository接口实现的实例,然后将其分配给
        //repository属性
        [Ninject.Inject]
        public IRepository repository { get; set; }
        public IResult GetResult()
        {
            return new DataResult<GuestResponse>(new GuestResponse());
        }

分离后的mvp示例程序如下

  public partial class Default : System.Web.UI.Page
    {
        //表示器干了所有的事情
        [Ninject.Inject]
        public IPresent<GuestResponse> presenter { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            //创建具体的表示器
           // presenter = new RSVPPresenter { repository=new MemoryRepository()};
            if (IsPostBack)
            {
                //得到一个模型
               GuestResponse rsvp= ((DataResult<GuestResponse>)presenter.GetResult()).DataItem;

                if (TryUpdateModel(rsvp,new FormValueProvider(ModelBindingExecutionContext)))
                {
                    Response.Redirect(((RedirectResult)presenter.GetResult(rsvp)).Url);
                }
            }
        }
    }

到这里基本的asp.net mvp基本的架构就解释完了,如果想一起讨论学习的加qq947219743,我将发送源代码一起讨论,本人菜鸟初做笔记,欢迎指导。

时间: 2024-10-09 09:03:24

1 简介mvp模式的相关文章

android MVP模式简介

MVP架构略解: M--Model,业务层(主要负责具体功能实现) V--View,视图层(用作显示) P--Presenter,连接层(搭建Model层和View层通信桥梁) MVP模式下,Model层和View层是完全隔离(解偶)的,两者的通信都是通过Presenter层作为桥梁来进行通信的,所以,Presenter层中一定含有Model层和View层具体实例(由这可以看出,当界面改变时,只需更改Presenter层中的View实例即可;同理,当数据加载方式改变时,只需更改Presenter

android MVP模式简单介绍

原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定 使用MVP作为你App的开发模式那么你就最好坚持做下去,如果在使用MVP模式开发过程中发现问题而且坑越来越大,这时你想用MVC等来重新设计的话基 本上就等于推倒重来了.要知道在Android上MVP在现在为止并没有统

Xamarin.Android MVP模式

一.简介 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包含4个要素: View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); View interface:需要View实现的接口,View通过View i

浅谈安卓中的MVP模式

端午放假,天气下雨,于是乎在家撸一下博客,本篇博客将为大家解析MVP模式在安卓中的应用. 本文将从以下几个方面对MVP模式进行讲解: 1.  MVP简介 2.  为什么使用MVP模式 3.  MVP模式实例 4.  MVP中的内存泄露问题 1.  MVP简介: 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model

Android开发:浅谈MVP模式应用与内存泄漏

最近博主开始在项目中实践MVP模式,却意外发现内存泄漏比较严重,但却很少人谈到这个问题,促使了本文的发布,本文假设读者已了解MVP架构. 本文原创作者:xiong_it,链接:http://blog.csdn.net/xiong_it MVP简介 M-Modle,数据,逻辑操作层,数据获取,数据持久化保存.比如网络操作,数据库操作 V-View,界面展示层,Android中的具体体现为Activity,Fragment P-Presenter,中介者,连接Modle,View层,同时持有modl

MVP模式入门案例

随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 四个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:需要View实现的接口,View通过View interface与Pr

基于MVP模式实现四则运算器

基于MVP模式四则运算器 来到新东家,项目的框架采用的是MVP模式,刚来公司的时候,项目经理给予分配小任务,首先熟悉MVP模式,而后普通的四则运算器的实现使用MVP分层.这里主要回顾当时做任务时候的对于MVP模式的理解. 我是一名.Net开发工程师,使用语言为C#.微软在桌面客户端的开发上,提供的是WinForm和WPF两种基于.Net Framework的平台,现在的项目也是主要以Winform实现.传统Winform程序如果不予以分层的话,代码耦合十分严重.为解决代码耦合性问题,现在主流的分

MVP模式是否适合我们使用? 代码说话

转载请注明出处:王亟亟的大牛之路 按照惯例今天上了一个关于沉浸式菜单栏的文章的就不写了,然后 下班前看到一些感兴趣的内容就研究了下,MVP模式之前有大致的了解但是没有实战的在安卓上用过.(国内也有一些大牛有些过类似的内容,但是每个人对一件事情的理解可能大致相同但是总有细微的差异,主要是把我对这件东西的理解和实现方式分享给大家) 我不太喜欢搬太多人家已经整理好的东西再贴出来搞的自己理论多牛B,我还是用代码和例子说话,那么这里留下一些别人讲过的概念性的东西给大家建立概念,这些设计层面的东西还是希望大

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V