我正在做Rails应用程序,人们可以在这里进行测验。我有一个模型BrowserGame
,它负责控制器逻辑(会话,重定向等)。目前,这是我的#initialize
方法:
class BrowserGame
def initialize(controller)
@controller = controller
end
end
在控制器中我有一个方法
class GamesController < ApplicationController
# actions
private
def browser_game
BrowserGame.new(self)
end
end
正如您所看到的,我将整个控制器传递给BrowserGame#initialize
(因此我可以使用会话和其他人操作)。这是一个好主意吗?是否有任何副作用,因为控制器实例是一个大对象?
答案 0 :(得分:6)
是的,将大对象作为方法参数传递是可以的。您不是将对象放在堆栈上,只是指向它的指针。就副作用而言 - 你在@controller
内对BrowserGame
做的任何事情都可以通过对控制器的任何其他引用看到,但这可能是你所期望的。
答案 1 :(得分:0)
传递大型物体没有问题。
正如Darshan所说,它只是一个指针。
如果您要分配进程/线程或者尝试创建延迟作业以在后台运行,那么最好只传递可序列化对象。