php - 我应该从我的 Controller 传递 session 数据,还是在服务层读取它?

标签 php oop design-patterns

我有一个相当典型的 PHP MVC 应用程序。我经常需要从 session 中获取数据,但我不确定是应该在 Controller 中还是在服务中执行此操作。

例如,如果请求到达 domain.com/user/edit,我的 Controller 可以从 session 中获取当前用户并将其传递给服务,或者服务可以访问 session 本身.

如果我在服务中这样做,它会在服务层和 session 对象之间创建依赖关系。如果我在 Controller 中这样做,它会使 Controller 变得有点胖。

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

谢谢!

最佳答案

简答:都不是。

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

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

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

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

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

服务仅使用此(通过工厂共享) session 映射器和 Controller 对此一无所知。

关于php - 我应该从我的 Controller 传递 session 数据,还是在服务层读取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14950199/

相关文章:

php - 使用 Illuminate Database 时在非对象上调用成员函数 connection() 时出错

c++ - 类字段重置为零

C# 类工厂

php - 在现实世界中使用 PHP 进行数据库连接的示例 OOP

c# - 如何检查默认的 DateTime 值?

C++,避免 RTTI 和访问者模式,可能吗?

php - 如何从我的网站/Web 应用程序连接到安全的 FtP?

php - 在 Laravel 中计算后从 mysql 表检索 id 时出现问题

php - Laravel 完全加入 groupby 并计数

从函数创建 Python 对象