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 ...
随机推荐
- Tomcat发布项目
WEB项目的目录结构 演示动态项目的创建 把项目打包成war包: 进入这个项目中,使用命令: jar cvf aaa.war * 发布动态项目的三种方式: 1. 直接复制项目到webapps下 2. ...
- php+mysql模糊查询功能
一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有 ...
- mongodb download
https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl
- 免费的HTML5版uploadify
转http://www.cnblogs.com/lvdabao/p/3452858.html var defaults = { fileTypeExts:'',//允许上传的文件类型,格式'*.jpg ...
- xampp 启动mysql 显示busy
1.端口被占用问题:2.默认3306端口并没有被占用:3.删除xampp\mysql\data\下的ibdata1再重启:4.没装其他mysql.
- 如何制作红蓝3d电影(详细教程)
自20世纪初以来,电影制作人一直试图通过制作3D电影来利用我们的双眼.现在,由于大量相对实惠的3D电视,你可以享受电影院以外的额外空间 - 你自己拍摄的视频.对于大预算的电影,电影摄影师使用两个相连的 ...
- 推荐一个好用的免费开源的笔记本软件CherryTree
我是一个好奇心很强的人,对未知的事物总有一种想要追根究底的冲动.多年以来,我学了很多东西,也学的很杂,积累了很多领域的知识.但不得不承认,人的记忆力很有限,学的越多忘的就越多.很久以前我就在想,怎么样 ...
- 跨域跨域跨域,从此say goodbye
跨域这个问题每个开发者都会遇到,只是时间先后而已,你不搞清楚它他就像狗皮膏药一样粘着你,在你求职生涯中不停的遇到,然后你每次都要做这个功课,终于有一天这个名词已经让我忍无可忍了,下定决心必须搞定它,要 ...
- POJ2594 Treasure Exploration【DAG有向图可相交的最小路径覆盖】
题目链接:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K T ...
- Javascript性能优化阅读笔记
第一章 加载和执行 大多数浏览器都是用单一进程处理UI界面的刷新和JavaScript的脚本执行,所以同一时间只能做一件事,Javascript执行过程耗时越久,浏览器等待响应的时间就越长. 所以,H ...