具有类似tempdata行为的强类型复杂会话对象中的体系结构注意事项

时间:2013-07-27 06:14:01

标签: c# asp.net asp.net-mvc-3 session asp.net-mvc-4

我正在尝试使用像行为这样的临时数据来构建一个强类型的复杂会话类。我对如何设置值以确保数据持久性感到困惑。

我在代码草图下面有几个问题

public class SomeService : ISomeService
{...
  ServiceObject _serviceObject;
  public SomeService(){
    _serviceObject = new ServiceObject();
  }

public SomeMethod(int z){
  if (ServiceObject.A != null){
    _serviceObjct.A = SomeMethodToGenerateA(z);
  }
  return _serviceObjct.A; 
}


[Serializable]
private class ServiceObject{
  public string A {
   get { return GetFromSession().a;}
   set { var sO = GetFromSession();
        sO.a = value;
        StoreInSession(sO);}
 }


 prop B ...
 prop C ...
 prob D ...

 private const string ServiceObjectKey = ServiceObjectKey 
 private void StoreInSession( ServiceObject nO ){
   Session[ServiceObjectKey] = nO;
 }

 private ServiceObject GetFromSession( ){
   return (ServiceObject)Session[ServiceObjectKey]; 
 }

 public void ClearObject(){
   Session[ServiceObjectKey] = new ServiceObject();
 }     

} }

Q1。会话变量是否通过引用工作?即。将

public string A {
    get { return GetFromSession().a;}
    set { var sO = GetFromSession();
          sO.a = value;}
 }

而不是

public string A {
    get { return GetFromSession().a;}
    set { var sO = GetFromSession();
         sO.a = value;
         StoreInSession(sO)}
}

Q2。对于这个对象,我应该考虑哪些额外的考虑因素?在某些时候,它可能必须被移动到一个进程外存储。它将访问会话一堆(每个请求最多12次!)

Q3。这个设计模式有名字吗?

如果你得到2/3的问题,你就赢了!

另外,我打算将它用作临时数据对象 。在onactionexecuted方法的请求结束时,我要清除对象[if(!actionresult是RedirectResult),然后重置对象]

Meta :(如果这个问题更适合论坛,那么在SO网站上,请告诉我应该发布的地方,我会及时删除它。我很清楚这个问题不是非常合适。)

0 个答案:

没有答案