Организация сессий Vars в Scala / Lift - PullRequest
7 голосов
/ 17 июня 2011

Хотелось бы подумать о том, как лучше организовать сессионные переменные в приложении scala / lift.

Я прочитал несколько материалов по scala в Интернете и обнаружил, как правило, следующую парадигму во всех примерах, которые представляют сессионные переменные:

  1. объявляет объект, расширяющий класс SessionVar
  2. поместить этот объект в файл, содержащий фрагмент (или любой файл)
  3. получить доступ к этому объекту из любой точки кодовой базы (лифт позаботится о жизненном цикле сеанса var на основе времени жизниhttp http session)

Возможно, я чего-то не понимаю, но меня беспокоит, что этот подход приведет к созданию целой пачки этих объектов в различных файлах повсюду.Это не такая уж большая проблема, если это маленькое приложение, но когда проект становится больше, это может привести к хаосу.

Для тех, кто работал над большими проектами scala, существует ли общепринятый лучший подход?(даже если это что-то простое, например, поместить все эти объекты в общий файл?)

Спасибо.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

SessionVars следует использовать в вашем приложении с осторожностью.Они похожи на переменные сеанса сервлета, за исключением того, что они безопасны от типа.

Сколько переменных сеанса вам нужно?Лично у меня есть переменная сеанса для первичного ключа текущего пользователя и, возможно, еще один или два.Остальная часть состояния приложения должна храниться в замыканиях (поскольку функции, связанные с GUID, закрываются за пределами области видимости).

4 голосов
/ 17 июня 2011

Это немного субъективно, но я попробую. Я думаю, что это зависит от области действия сеанса var в вашем проекте.

  • Если вам нужен сеанс var только в одном фрагменте, вы должны сделать его закрытым членом этого класса.
  • Если вам это нужно в нескольких, но не во всех фрагментах, поместите эти фрагменты в пакет и сделайте объект закрытым для этого пакета. Если у вас их много, вы можете создать дополнительный файл для их хранения.
  • Если вам нужно глобально, поместите его в центральное место, возможно, внутри объекта пакета.
  • Если возможно, избегайте использования SessionVars полностью.
...