关于在分层架构下,Web Form和Window Form如何共享会话状态。系统被设计为以下几个层次:
表现层。
  UI  components    ---  WebForm 或者Window界面。
业务逻辑层
    应用服务层    --- Facade
    领域逻辑      --- 利用业务实体实现领域逻辑
持久层
  数据库          --- SQL Server
现在的问题是:
业务逻辑层是否要维护会话状态。
不维护的优点是:
  如果业务逻辑层是设计层无状态的。
  那么很容易在业务逻辑层上添加一个远程外观 (Remote facade),将应用层需扩展成分布式的。
  如果这样,会话状态就得表现成来维护
  我想这样添加一个层。  表现层。
      UI  components                        ---  WebForm 或者Window界面。
      UI Process Components         
          作用: 处理用户的界面流程,比如在网上买东西,如下几个页面完成。
                    1,填写订单。
                    2,填写支付信息。
                    3,填写递送信息。
                    4,确认提交。
   
这样,在一个会中的各个不同页面中,UI Process Components 层负责维护会话状态。
但是这样做的缺点是:
    当从Web Form 转到Window Form实现时,UI Process Components  都要从新实现一遍。
    因为Web Form 和Window Form保存会话状态的机制不一样。 
    比如Window Form不能用Session吧。
我应该如何来做。 

解决方案 »

  1.   

    我们做了一个项目,我贴上部分代码,希望对你有启发:    
    public class CurrentUser
        {
            private static int? mUserId;
            public static int? UserId
            {
                get
                {
                    if (System.Web.HttpContext.Current == null)
                        return mUserId;
                    else
                    {
                        if (System.Web.HttpContext.Current.Session["xxxxxx"] == null)
                            return null;
                        else
                            return (int)System.Web.HttpContext.Current.Session["xxxxxx"];
                    }
                }
                set
                {
                    if (System.Web.HttpContext.Current == null)
                        mUserId = value;
                    else
                    {
                        System.Web.HttpContext.Current.Session["xxxxxx"] = value;
                    }
                }
            }
                }