1

这个“问题”的常用方法(或设计模式)是什么:

  1. 我在 Web 应用程序中有很多控制器(准确地说是 JAVA 中的 struts 操作)。
  2. 一些控制器在用户会话中设置变量。
  3. 一些控制器使用这些变量,删除它们,修改它们等等......

这很混乱,因为很难知道谁设置了什么,在什么条件下,在哪里改变......

我应该使用调解员模式: http ://en.wikipedia.org/wiki/Mediator_pattern

或者像这样的外观模式(c# 中的示例): http: //foxsys.blogspot.ca/2007/01/session-facade-aspnet-c.html

或者是其他东西?


变量的工作流程示例及其混乱程度:

  1. 用户选择了喜欢的产品。ChooseProductController 设置会话中首选产品的 id

  2. 用户创建一个帐户: CreateAccountController 检查首选产品是否在会话中。如果是这种情况,它会在 DB 中创建具有此 ID 的帐户

  3. 用户已登录。 LoginController 检查首选产品是否在会话中。如果它与创建帐户时数据库中的不同,则视图需要显示一条消息,要求用户选择首选产品。

4

1 回答 1

2

第一个建议:尽可能少地使用会话。尝试仅将其用于生命周期与会话生命周期相同的事物,并且不能轻松或足够快地从数据库中检索。

第二个建议:不要直接使用会话。将对会话的访问封装在一个或几个专用类中(就像您对数据库所做的那样,除了会话是内存数据库)。而不是做

Product preferredProduct = (Product) session.getAttribute("preferredProduct");

,做类似的事情

SessionStore.getInstance(session).getPreferredProduct();

这更具可读性,更不容易出错,并且允许在所有代码库中轻松找到首选产品的获取或设置。

于 2012-09-19T21:30:57.520 回答