2012-05-24 47 views
4

我有一个关于ASP.NET MVP模式的问题。演示者是否可以知道会话值?如果我开始使用会话值,我不知道如何对会话进行模拟或测试,以及如果我使用相同的演示者进行Win表单的话。这是一个正确的方向,如果是的话,我在处理会话值时有什么选择。MVP模式和会话值

+0

您的问题读到我的脑海里。给予好评。 – granadaCoder

回答

3

演示者不应该知道Session对象(或来自System.Web的任何其他对象),但是如果通过视图公开会话数据,它可以知道这些值。

随着MVP,你有这样的观点:

public interface IViewCustomerView 
{ 
    ShoppingCartModel ShoppingCart {get;set} 
} 

在Web表单实现的观点,我的购物来源于会话。

public partial class ViewCustomers : Page, IViewCustomerView 

ShoppingCartModel ShoppingCart 
{ 
    // add null/cast checks etc. here 
    get { return (ShoppingCartModel) Session["Cart"]; } 
    set { Session["Cart"] = value; } 
} 

在Web表单和mock实现它可能来自别的地方。然后在演示者中,当您访问购物车时,它不知道它来自会话:

IViewCustomerView _view; 

_view.ShoppingCart... 
2

我对MVP位不太确定,但是你可以编写一个像ISessionState这样的接口,它可以设置/从某些东西获取值。在你的网站上,这个会读取/写入真实的Session对象,但是在测试中,你会制作一个假装使用会话的模拟对象。

一旦你提取了这个依赖关系,应该很容易将ISessionState实现注入到演示者或任何其他需要它的实现中。

+0

不错的想法。请试试这个 – Greens