设想
我有一个应用程序,我希望将事件记录到第三方(通过将Gabba混合到我的模型中的自定义模块)。事件在模型中生成,但生成事件的服务器端代码需要访问当前请求的 cookie。
MVC 问题
这是模型需要控制器包含的数据的问题的特殊化。忠于 MVC,模型不应该访问控制器。我见过的答案是将所需的值作为参数传递给模型。虽然我在大多数情况下都同意这种方法,但我认为这不是最好的解决方案,因为通常情况下它是未知的,并且如果模型要生成事件,它也不是控制器的关注点。
所以举个具体的例子:
想象一个“用户”模型有一个名为“创建”的静态方法。UsersController 使用用户哈希调用 create 方法。create 方法希望向 Gabba 发布“用户创建”事件,但需要为当前请求解析 google 分析 cookie。 将 cookie 发送给 User#create 似乎并不正确。
我想到的是:
- 将度量模块所需的 cookie 值放入模型可访问的某种全局数据存储中。(哪里是最好的地方?)
- 将事件放在某种存储中,并让控制器在处理请求结束时运行事件代码。