Playframework 多控制器播放框架(和会话管理) 对于纯代码组织的目的,我考虑在我的应用程序中创建多个控制器。我没有发现由控制器对象创建的特殊开销。在快速检查play的源代码时,它似乎不会产生任何特别厚的对象,这些对象会导致每个控制器占用大量内存

Playframework 多控制器播放框架(和会话管理) 对于纯代码组织的目的,我考虑在我的应用程序中创建多个控制器。我没有发现由控制器对象创建的特殊开销。在快速检查play的源代码时,它似乎不会产生任何特别厚的对象,这些对象会导致每个控制器占用大量内存,playframework,Playframework,然而,我想知道会话是否无缝地跨控制器,或者它们是否以某种方式绑定到控制器的边界。我也考虑使用它的情况下。 谢谢 没有理由认为会话无法在不同控制器之间无缝工作。游戏被设计成尽可能无状态,所以控制器不应该保持任何可能使会话行为不同的状态 例如,以下各项之间实际上没有区别: object Users extends Controller { def read(id: Long) = Action { ??? } def create() = Action { ??? } } 及 很

然而,我想知道会话是否无缝地跨控制器,或者它们是否以某种方式绑定到控制器的边界。我也考虑使用它的情况下。


谢谢

没有理由认为会话无法在不同控制器之间无缝工作。游戏被设计成尽可能无状态,所以控制器不应该保持任何可能使会话行为不同的状态

例如,以下各项之间实际上没有区别:

object Users extends Controller {
    def read(id: Long) = Action { ??? }

    def create() = Action { ??? }
}

很明显,这不是我们想要的理想的组织结构,但它表达了我的观点。控制器应该以您认为最适合您的代码的方式组织。唯一可以区别对待会话数据的时间是,如果控制器对象混合了不同的特征,或者使用不同的
操作
类型。我对SecureSocial不是很熟悉,但图书馆的选择不应该真正相关


除非您将数据存储在控制器内的变量中(或类似的东西),否则您应该不会有问题

谢谢,我只是不确定你说的混合不同的
动作
类型和不同的特质是什么意思。可以有一个使用Action的控制器,一个使用DBAction的控制器,一个使用Action.async的控制器,我假设每个控制器都可以承载所有这些类型的方法。实际上,什么样的“混合”会改变会话处理?一点也不,真的。例如,如果
DBAction
依赖于
控制器中的某种属性,但该属性被某个属性覆盖。在我熟悉的背景下。例如,在play2 auth中,有一个
StackAction
,其行为依赖于混入的
AuthConfig
特征,它将导致不同
AuthConfig
实现之间的不同行为。所以说真的,很少使用不同的。另一个例子是出于任何原因(也极为罕见)对会话数据进行变异的某种操作。感谢您的回答,并在上下文中揭开控制器的神秘面纱!
object ReadUsers extends Controller {
    def read(id: Long) = Action { ??? }
}

object CreateUsers extends Controller {
    def create() = Action { ??? }
}