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,我将发送源代码一起讨论,本人菜鸟初做笔记,欢迎指导。
1 简介mvp模式的更多相关文章
- Xamarin.Android MVP模式
一.简介 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只 ...
- Android开发MVP模式解析
http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html 在开发Android应用时,相信很多同学遇到和我一样的情况,虽然 ...
- Java(Android)编程思想笔记03:在Android开发中使用MVP模式
1. MVP模式简介: MVC模式相信大家肯定是比较熟悉的:M-Model-模型.V-View-视图.C-Controller-控制器. MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M- ...
- android MVP模式简单介绍
原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到 ...
- android的MVP模式
MVP简介 相信大家对MVC都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型. ...
- [译]Google官方关于Android架构中MVP模式的示例
概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- 在Andoid开发中使用MVP模式来解耦,增加可测试性
by Jeff Angelini posted on 7/20/2011 2:35:00 PM 将应用程序UI的表现从Ui的逻辑中分离是一个好的想法.这种分离减少了代码耦合,代码更加干净, 甚至可以有 ...
- MVP模式(Android)
以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也是使用类似MVC的架构(严格来讲,之前的项目还算不上MV ...
随机推荐
- Web前端学习笔记——Canvas
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- LocalDB数据库修改排序规则,修复汉字变问号
VS中新增的轻量级数据库LocalDB,有个这个,开发人员就不必再安装庞大的SQL server了,可以方便地测试运行小型项目:既然是轻量级数据库,它抛弃了庞大的身躯,功能上当然也会受到局限,其中之一 ...
- Google Directions API 中路线编码解析
public List<Location> GetGeoPoints(string encoded) { List<Location> poly = new List<L ...
- opencv C++ mask_rcnn
#include <fstream> #include <sstream> #include <iostream> #include <string.h> ...
- 如何不让Excel图表随源数据改变而改变
如何不让Excel图表随源数据改变而改变 一般我们在用Excel时,经常会碰到一些问题,比如,如何才能不让Excel图表随源数据改变而改变呢,下面就谈一下,一般在默认情况下,Excel的图表在一个区域 ...
- Delphi repeat Until 运用
procedure TForm3.SpeedButton1Click(Sender: TObject); Var I:integer; begin I:=; repeat I:=I+; ; ShowM ...
- python进阶--多线程多进程
一.线程和进程 进程是拥有独立内存,能够独立运行的最小单位,也是程序执行的最小单位,线程是程序运行过程中,一个单一的顺序控制流程,是程序执行流的最小单位,一个进程至少包含一个线程,多线程共享进程的内存 ...
- jprofile 远程监控linux上的jvm
环境 客户端:win7+jprofiler_windows-x64_10_0_4.exe linux服务器:tomcat7+jdk1.7+jprofiler_linux_10_0_4.sh 一.客户端 ...
- python之selenium玩转鼠标操作(ActionChains)
前提: 一般人用selenium自动化时,会用到模拟鼠标操作的情况,像单击,双击,右击,左击啊等,这个时候我们就要用到ActionChains了. 内容: 1.ActionChains用法整理 cli ...
- 【AMAD】django-channels -- 为Django带来异步开发
动机 简介 个人评分 动机 目前web生态的发展带来了很多异步特性,比如websocket.而原生Django并不支持. 简介 django-channels1为Django带来了Websocket, ...