PHP DAO 让用户彼此成为朋友(技术上)

Posted

技术标签:

【中文标题】PHP DAO 让用户彼此成为朋友(技术上)【英文标题】:PHP DAO Letting users befriend eachother (technically) 【发布时间】:2014-02-07 22:03:52 【问题描述】:

假设我有可以互相成为朋友的用户,从技术上讲,我如何在 php 中使用 DAO 解决这个问题?

数据库:

users       |  user_friends
- userid    |  - userid_user1
- username  |  - userid_user2

PHP 用户对象:

class User

  private $userid;
  private $username;

  // getters and setters

我是否应该使用这种方法与用户交朋友:

$u1 = UserDAO::getInstance()->findUserById(1);
$u2 = UserDAO::getInstance()->findUserById(2);

UserDAO::getInstance()->befriendUsers($u1, $u2);

或者我应该使用这种方法:

$u1 = UserDAO::getInstance()->findUserById(1);
$u2 = UserDAO::getInstance()->findUserById(2);
$u1->befriend($u2);

// befriend method would look like this in the User object
public function befriend(User $u)

  UserDAO::getInstance()->befriend($this, $u);

或者其他方式?

【问题讨论】:

正如@MikeSW 所说,这不是数据访问对象的角色。 DAO 应该映射应用程序中的对象并将它们持久保存到数据存储(数据库、文件等)。它不应包含任何业务逻辑,例如与用户交朋友。 【参考方案1】:

实际上,没有。 UserDAO 处理用户但不处理用户关系,这是一个不同的问题。

为简单起见,您应该有另一个会关心友谊的 FriendsDao。当然,当用户被删除时,您需要更新好友关系。

【讨论】:

那么 FriendsDAO 有一个方法,它接受两个 User 对象,然后在这种情况下将记录保存到 user_friends 数据库表中? 另外,返回 User 对象的 UserDAO::getInstance()->findUserById(1) 方法是 DAO 的任务吗?

以上是关于PHP DAO 让用户彼此成为朋友(技术上)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA:在自联接关系中的 JSON 视图上递归

如何让 2 个“朋友”比较,看看他们是不是在彼此的朋友列表中?

MantisBT如何让管理员控制用户密码

元宇宙世界里DAO赛道究竟具有多大发展潜力

相互依赖的MongoDB

如何让用户在 Facebook 页面上的标签发布的 Facebook 状态更新中标记他们的朋友?