关于在分层架构下,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吧。
我应该如何来做。
表现层。
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吧。
我应该如何来做。
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;
}
}
}
}