在Scala / Lift中组织会话变量

时间:2011-06-17 05:33:25

标签: scala session-state lift

想了解如何在scala / lift应用程序中最好地组织会话变量。

我已经在线阅读了一些scala资料,并且在所有引入会话变量的示例中都发现了以下范例:

  1. 声明一个扩展SessionVar类的对象
  2. 将该对象放入包含代码段(或任何文件)
  3. 的文件中
  4. 从代码库中的任何位置访问该对象(提升将根据用户的http会话的生命周期来处理会话var的生命周期)
  5. 也许我不理解某些东西,但我担心这种方法会在各个地方的各种文件中导致一大堆这些对象。如果它是一个小应用程序,它不是一个大问题,但当一个项目变大,这可能会导致混乱。

    对于那些参与过大型scala项目的人来说,是否有一种普遍接受的更好的方法? (即使是将所有这些对象放入公共文件的简单方法吗?)

    感谢。

2 个答案:

答案 0 :(得分:4)

这有点主观,但我会试一试。我认为这取决于会话var在您的项目中的范围。

  • 如果您只需要在一个代码段中使用会话var,则应将其设为该类的私有成员。
  • 如果您需要多个但不是所有代码段,请将这些代码段放在一个包中,并将该对象设为该包的私有对象。如果你有很多,你可以创建一个额外的文件来保存它们。
  • 如果您需要全局,请将其放入中心位置,也可以放在包裹对象中。
  • 如果可能,请避免完全使用SessionVars。

答案 1 :(得分:4)

应在您的应用程序中谨慎使用SessionVars。它们与Servlet会话变量类似,但它们是类型安全的。

您需要多少个会话变量?就个人而言,我有一个会话变量用于当前用户的主键,可能还有一两个。应用程序状态的其余部分应存储在闭包中(因为与GUID关联的函数关闭范围)。