我正在研究这个在模型层访问会话变量的应用程序。这似乎是错误的,但我愿意被证明是错误的。也许没有错,但在应用程序的大多数地方,会话变量在控制器中处理并作为参数传递,但在其他地方,会话值只是访问。我说这是不好的练习,我说错了吗?
编辑:我不喜欢模型中的会话的一个原因是,它似乎使测试变得更加复杂。将其作为传递给函数的参数,然后将记录集传递回来。
thx
看情况。
我是这样想的:
- 一个模型代表你的数据层。
- 大多数情况下,数据层将基于DB表 会话只是另一个数据存储介质。
- 结论:如果你的模型代表的数据存储在会话中,那么从模型 中访问该数据是OK的
控制器应该在使用使用该会话的模型之前检查会话是否存在。
不应该。存储类型应该与业务逻辑分开。例如:
我有一个简单的插件,它执行访问检查并将用户对象放在注册中心。因此,模型可以访问定义良好的注册表,而不是访问会话。
$User = Zend_Registry::get('User'); // User model object
从理论的角度来看,一切都应该通过数据映射器来访问。将来,如果您将会话存储更改为其他存储,则只需要在一个地方更新它。您的模型不需要知道数据来自何处。
如果您使用多个路径来获取数据,当您的应用程序变大时,可能会导致一些问题。
面向对象和分层系统方法的建议是创建专门的对象和层,并保持事情简单,防止特定的操作分布在整个代码中。
但是,你不需要改变它,除非你看到好处。请记住,有时候重构比试图预测一切更有效。
会话变量中存储了什么?如果只是"登录"?Y/N',那么它们可能不需要成为模型层的一部分。然而,如果它比这更复杂,它们可能与你的商业模式有着不可分割的联系,应该这样对待。
Zend Test文档底部的示例展示了如何使用登录函数测试完整的MVC。想必您在测试模型时也可以这样做吧?