【问题标题】:Organizing Session Vars in Scala/Lift在 Scala/Lift 中组织会话变量
【发布时间】:2011-06-29 07:58:00
【问题描述】:

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

我在网上阅读了许多 scala 材料,并在所有引入会话变量的示例中发现了以下范式:

  1. 声明一个扩展 SessionVar 类的对象
  2. 将该对象放入包含 sn-p(或任何文件)的文件中
  3. 从代码库中的任何位置访问该对象(l​​ift 将根据用户 http 会话的生命周期处理会话变量的生命周期)

也许我不理解某些东西,但我担心这种方法会导致大量这些对象出现在各种文件中。如果它是一个小应用程序,这没什么大不了的,但是当一个项目变得更大时,这可能会导致混乱。

对于那些从事过大型 scala 项目的人,是否有普遍接受的更好方法? (即使它很简单,比如将所有这些对象放入一个公共文件中?)

谢谢。

【问题讨论】:

  • ...并不是每个人都喜欢 LiftWeb 的原因:p

标签: scala session-state lift


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 好的。我知道函数可以关闭在函数定义之外声明的变量,但我不清楚如何将函数与 GUID 关联。你能指出一个具体的例子来说明如何实现这一目标吗?也许我错过了一些东西。再次感谢!
    • 我还希望了解更多细节(文本或工作源文件的 URL 就足够了)。我有类似的疑问,找不到可以启发我一点的好资源(在 Assembla、Exploring Lift 书甚至邮件列表中)。提前致谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多