3

我在 PHP 中有一个相当典型的 MVC 应用程序。很多时候我需要从会话中获取数据,但我不确定是否应该在控制器或服务中执行此操作。

例如,如果请求命中domain.com/user/edit,我的控制器可以从会话中获取当前用户并将其传递给服务,或者服务可以访问会话本身。

如果我在服务中这样做,它会在服务层和会话对象之间创建依赖关系。如果我在控制器中这样做,它会使控制器变得更胖。

我知道这只是一个小问题,但我在会话中存储了很多(小)变量,并且我的请求的参数处理本身就非常复杂。

谢谢!

4

2 回答 2

4

简短的回答:两者都不是。

现在有点孤独的解释......

从架构的角度来看,会话是一种存储形式。在 PHP 中,很容易操作它实际上是哪种类型的存储。

MVC 中的服务是处理应用程序逻辑的模型层的一部分。也就是说 - 它处理域对象和存储抽象之间的交互(通常直接或间接实现为数据映射器)。

因此,您应该将访问(也是初始化)抽象$_SESSION为某种SessionMapper,它可以处理整个域对象的存储或仅存储来自这些域对象的特定参数。

并且由于 session (通常)是您执行中的一个单一结构,如果请求,您可以通过确保Factory生成数据映射器的 仅创建一个实例来强制执行SessionMapper

服务仅使用此(通过工厂共享)会话映射器,控制器对此一无所知。

于 2013-02-19T18:25:54.423 回答
-3

$_SESSION是一个全局变量。为什么一定要传递可以全局访问的东西?

除非需要验证会话数据并且需要以某种方式准备其数据,否则无需将此类变量传递给控制器​​类。

于 2013-02-19T05:07:49.193 回答