Zend Framework应用程序设计 - 应该在Model层中访问会话变量

时间:2011-09-02 19:10:52

标签: php zend-framework design-patterns

我正在开发这个访问模型层中会话变量的应用程序。这似乎是错的,但我愿意被证明是错的。也许没有错,但是在应用程序的大多数地方,会话变量在控制器中处理并作为参数传入,但在其他地方,会话值只是被访问。我错了,这似乎是不好的做法吗?

编辑: 我不喜欢模型中的会话的一个原因是它似乎使测试更加复杂。保持它只是params传递给函数然后记录集传回。

THX

4 个答案:

答案 0 :(得分:4)

取决于。

我对此的看法是这样的:

  1. 模型代表您的数据层。
  2. 大部分时间数据层都是基于数据库表的
  3. 会话只是另一种数据存储媒体。
  4. 结论:如果您的模型所代表的数据存储在会话中,则可以从模型中访问该数据
  5. 一个例子是基于会话的购物车。我的购物车对象是我的会话数据的模型。

答案 1 :(得分:2)

控制器shd在使用其中使用该会话的模型之前是否存在检查天气会话。

答案 2 :(得分:0)

会话变量中存储了什么?如果它只是'登录? Y / N',那么他们可能不需要成为模型层的一部分。但是,如果它比这更复杂,它们可能与您的商业模式密不可分,应该这样对待。

Zend Test文档底部的示例显示了如何使用登录功能测试完整的MVC。据推测,在测试模型时你可以做同样的事情吗?

答案 3 :(得分:0)

不,不应该。存储类型应与业务逻辑分开。例如:

我有一个简单的插件,可以执行访问检查并将用户对象放在注册表中。因此,模型可以访问注册表,而不是访问会话,这是明确定义的。

$User = Zend_Registry::get('User'); // User model object

从理论的角度来看,应该通过数据映射器访问所有内容。将来,如果您从会话存储更改为其他内容,则需要在一个位置更新它。您的模型无需知道数据来自何处。

如果您要获取数据的路径不止一条,那么当您的应用程序变大时,这可能会导致一些问题。

OOP和分层系统方法建议是创建专门的对象和层,并保持简单,防止特定操作遍布整个代码。

但是,除非你看到优势,否则你不需要改变它。 请记住,有时重构比尝试预测一切更有效。