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