• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MVP模式在asp.net中的应用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  前段时间,由于项目中需要用到MVP模式,于是我便来博客园查了一下,发现博客园有关MVP模式的资料少之又少,加上本人在博客园潜水这么久,也想出来透透气啦,从而产生了写博的冲动。整个项目做下来,也对MVP模式有了一定的了解,特写下这篇文章来做一个总结吧,希望对学习MVP模式的朋友有所帮助。话不多说,直接上图:

    

  但是本章的重点不是这张图,而是在asp.net项目中怎么去用MVP模式。如果您对MVP模式有所了解的话,那么接下来就要上菜啦。

  下面就用一个view开始:

    

public interface IMvpView
{
}

  这是一个最基本的View接口,也就是说我们的UI(page,control)会直接或间接的继承它,我们还可以在这个接口里定义一些属性和方法,而这些属性和方法是在我们每个界面都会用到的。很简单吧!

 

  接下来就是一个presenter的基础类:

  

public abstract class Presenter<TView> where TView : IMvpView
{
public TView View { get; set; }

public virtual void OnViewInitialized()
{
}

public virtual void Save()
{
}
}

 

 

  这是一个最基本的presenter class,我把它定义为一个抽象的泛型类。这个类的内容也很简单,它有一个TView类型的View属性,注意这里的TView不应该是一个具体View,而应该是一个View的抽象。它还包括两方法,OnViewInitialized()和Save(), 我都把它们定义为Virtual,是要在继承类中重载。其中OnViewInitialized()方法里主要执行一些当(IsPostBack==false)的操作,当然你还可以增加一个OnViewLoad()方法,来执行当页面加载时的操作.

  

  定义了一些最基本的,接下来我要定义一些东东继承它们。

  接下来创建一个IPersonView,它继承自我们最基本的view接口IMvpView:

  

public interace IPersonView:IMvpView
{
IList
<Person> Persons{get;set;}
void Save();
}

  接下来我又创建了一个PersonPresenter类,它继承自Presenter抽象类

  

public class PersonPresenter : Presenter<IPersonView>
{
private readonly IPersonController _controller;

public PersonPresenter(IPersonController controller)
{
_controller
= controller;
}

public override void OnViewInitialized()
{
View.Persons
= _controller.GetPersons();
}

public override void Save()
{
//do something
}
}

  等等,怎么会突然冒出个IPersonController,这个接口干嘛的?重点来啦,presenter凭什么可以承担起UI的所有逻辑,就是因为有这个IPersonController接口,这个接口的主要职责是通过您的Data Layer获得presenter完成UI逻辑所需要的数据,它是presenter的强大靠山。在这个例子中,IPersonController获得person列表,来给赋给View的Persons属性,当然还做一些保存的动作(Save()).

 

  接下来我还要做一件很有意义的事情,就是创建一个抽象的基础页面类:

  

public abstract class ViewBasePage<TPresenter, TView> : Page,IMvpView
where TPresenter : Presenter<TView>
where TView : IMvpView
{
protected TPresenter _presenter;

public TPresenter Presenter
{
set
{
_presenter
= value;
_presenter.View
= (IMvpView)(object)this;
}
}
}

  所有UI都会继承这个类,虽然它现在所做的事情很简单(仅仅是做范例),当然你还可以加一些在其它界面都会用到的方法或者属性来增强这个基类。

 

  在这个例子中,我没有去实现Data Layer和controller,当然这也不是本文的重点,我希望通过这篇文章,让学习MVP模式的朋友,能对MVP模式有一个新的认识。  

 

 

  

 

    


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETMVC性能优化(实际项目中)发布时间:2022-07-10
下一篇:
如何在ASP.NET Core中构造UrlHelper,及ASP.NET Core MVC路由讲解发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap