我对ASP.NET MVP模式有疑问。演示者可以了解会话值吗?如果我开始使用会话值,我不知道如何模拟或测试会话,以及如果我使用相同的演示者为Win表单,该怎么办。这是正确的吗?如果是这样,我在处理会话价值方面的选择是什么。
答案 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
实现注入你的演示者或其他任何需要它。