大家。我目前在.net mvc3项目团队工作。今天,我的团队负责人告诉我使用自定义捕获(由他实现)而不是session。我看到两者的使用几乎相同。 (我看不到他的源代码:)
Session["somekey"] = somevalue, somevar = Session["somekey"]
&安培;
CustomCatch["somekey"] = somevalue, somevar = CustomCatch["somekey"].
我想问一下我的团队领导者希望我使用他的自定义捕获而不是会话的优势是什么?或者他只是想让我做“额外”的工作?
答案 0 :(得分:3)
我不知道CustomCatch
是什么。但是,如果您想使事情更简单,更易于测试,请使用IStorageService
和所谓的Session
创建一个接口CustomCatch
及其实现。存储服务将替换您示例中的调用。
public interface IStorageService
{
void SetValue(string key, object value);
object GetValue(string key);
}
Session
public class SessionStorageService : IStorageService
{
public void SetValue(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
public object GetValue(string key)
{
return HttpContext.Current.Session[key];
}
}
Session
或CustomCatch
的使用仅限于这些实施,不会在其他代码中泄露。
答案 1 :(得分:2)
我必须说实话。我认为Session
对象是一个大恶魔(double
/ float
,Regex
es不考虑国际化和变音符号(例如àèéìò), Regex
一般来说,代码块不考虑国际化(àèéìò,日期和数字格式)和其他一些代码。
您可以使用它来存储当前用户的个人资料。您可以使用它来存储当前用户的设置。完全停止。其他一切都是糟糕的坏事。
这是因为如果您的用户在页面上执行ctrl-n,则打开的新窗口将使用相同的Session
。现在开始思考会发生什么。
也许您的团队负责人确实解决了这个问题。