我在PHP中有一个相当典型的MVC应用程序。我经常需要从会话中获取数据,但我不确定是否应该在控制器或服务中执行此操作。
例如,如果请求命中domain.com/user/edit
,我的控制器可以从会话中获取当前用户并将其传递给服务,或者服务可以访问会话本身。
如果我在服务中执行此操作,则会在服务层和会话对象之间创建依赖关系。如果我在控制器中执行此操作,则会使控制器变得更胖。
我知道这只是一个小问题,但我在会话中存储了很多(小)变量,而我的请求的参数处理本身就非常复杂。
谢谢!
答案 0 :(得分:3)
简短回答:。
现在有点孤独的解释......
从架构的角度来看,会话是存储的形式。在PHP中,操纵它实际上是哪种类型的存储非常容易。
MVC中的服务是模型层的一部分,它处理应用程序逻辑。那就是 - 它处理domain objects和存储抽象之间的交互(通常直接或间接地实现为data mappers)。
因此,您应该将$_SESSION
访问(也是初始化)抽象为某种SessionMapper
,它可以处理域对象的整体存储或仅存储来自这些域对象的特定参数
由于会话(通常)是执行中的单一结构(如果请求),您可以通过确保生成数据映射器的Factory
仅创建一个所述SessionMapper
的实例来强制执行该操作。
服务仅使用此(通过工厂共享)会话映射器,控制器对此一无所知。
答案 1 :(得分:-3)
$_SESSION
是一个全局变量。为什么你必须传递可以全局访问的东西?
除非需要验证会话数据并且需要以某种方式准备其数据,否则无需将这些变量传递给控制器类。