【发布时间】:2012-09-10 09:51:20
【问题描述】:
我正在开发一个 Flash 游戏网站。我有两个模型:Game 和 User 以及一个中间表,我在其中保存用户的操作,例如:“用户 1 喜欢游戏 3”。
- 我喜欢的功能在哪里最好?
- 在 Game 模型中获取当前用户 ID 是一种好习惯吗?还是应该将其作为参数传递?
出于性能原因,我也在游戏表中增加了喜欢的字段。
为了简单起见,我省略了检查用户是否已经喜欢该游戏。
以下是我的选择:
第一版:
$user->like(12345);
class User
{
public function like($game_id)
{
$like = new User_Game();
$like->user_id = $this->id;
$like->game_id = $game_id;
$like->save();
$obj = new Game($game_id);
$obj->likes++;
$obj->save();
}
}
第二版:
$game->like(); // by current user
class Game
{
public function like()
{
$like = new User_Game();
$like->user_id = $_SESSION[‘user_id’];
$like->game_id = $this->id;
$like->save();
$this->likes++;
$this->save();
}
}
【问题讨论】:
-
Is it a good practice to grab current user id in Game model?没有。or should I pass it as parameter?是。想一想,现在您将活动用户的 id 存储在会话中,如果稍后将其存储在其他地方会发生什么?更重要的是,您的功能仅对当前活跃用户可用,您不能like()对任何其他用户使用。用户 id 是一个外部依赖项,绝对没有理由将您的游戏模型绑定到它,请阅读 dependency injection。
标签: php oop model social-media-like