【发布时间】:2016-01-16 19:38:16
【问题描述】:
我为最近做的一个网站设计了一个购物车。为了我的坚持,我选择了会话。目前,购物车负责自己的会话管理。当Cart 被实例化时,constructor 使用Session 外观从会话中恢复购物车。当Cart 被销毁时,destructor 将购物车的当前状态保存到会话中,再次使用外观。我知道这不好,需要重构。
我看到了 2 条可能的会话管理路线,所以我的问题是,管理会话是谁的责任?控制器是否应该负责在会话中保存和恢复购物车? 或者我是否将会话层注入到购物车中,并且购物车仍然在内部处理它?
我会说我使用 php __destruct() 得到的结果好坏参半,因为它可以在关机序列期间以任何顺序调用。我想我想放弃使用它,因为它的行为不可预测(除非有人说服我不这样做)。
购物车处理自己的会话存储的一个好处是,我只需在 1 位置处理保存和恢复。如果我走控制器路线,我想我将需要 restore() 和 save() 它用于每个需要它的控制器方法。如果清理购物车的依赖项,我不反对,但显然我们总是喜欢少写代码。
我知道这个问题有点开放式,可能会征求基于意见的答案,所以请提供具体示例,说明您尝试过的方法是否有效,以及它们的优缺点。
谢谢!
【问题讨论】:
-
这里没有真正的要求,只要会话处于活动状态,购物车就处于活动状态。为什么要问?
-
大概 30 分钟,无论我的 php 配置文件中的默认值是什么。
-
没关系。通过使用依赖注入,选择另一个实现很简单
-
不,它已经消失了。虽然这是一个有效的选择,但这是一个完全不同的讨论。我选择了这个项目的会议,因为它符合业务需求。我的问题是关于会话管理的责任。