MVP模式和会话值

时间:2012-05-24 14:21:52

标签: asp.net mvp

我对ASP.NET MVP模式有疑问。演示者可以了解会话值吗?如果我开始使用会话值,我不知道如何模拟或测试会话,以及如果我使用相同的演示者为Win表单,该怎么办。这是正确的吗?如果是这样,我在处理会话价值方面的选择是什么。

2 个答案:

答案 0 :(得分:3)

Presenter不应该知道Session对象(或System.Web中的任何其他内容),但如果您通过视图公开会话数据,它可以知道这些值。

使用MVP,您可以看到如下视图:

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

在您的网络表单视图实现中,ShoppingCart来自会话。

public partial class ViewCustomers : Page, IViewCustomerView

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

在您的网络表单和模拟实现中,它可以来自其他地方。然后在演示者中,当您访问购物车时,它不知道它来自会话:

IViewCustomerView _view;

_view.ShoppingCart...

答案 1 :(得分:2)

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

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

相关问题