4

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

4

2 回答 2

3

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

使用 MVP,您可以看到这样的视图:

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

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

public partial class ViewCustomers : Page, IViewCustomerView

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

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

IViewCustomerView _view;

_view.ShoppingCart...
于 2012-05-24T16:39:09.053 回答
2

I'm not too sure about the MVP bit, but you could write an interface like ISessionState which would have the ability to set/get values from something. In your website this would read/write to the real Session object, but in testing you would make a mock object which pretends to use a session.

Once you have this dependency extracted, it should be easy to inject an ISessionState implementation into your presenters or whatever else requires it.

于 2012-05-24T15:21:24.893 回答