gpt4 book ai didi

php - 在另一个 DAO 中使用一个 DAO——好的还是坏的做法?

转载 作者:搜寻专家 更新时间:2023-10-31 21:18:56 29 4
gpt4 key购买 nike

这可能是一件非常微不足道的事情,但我是一些面向对象模式的新手。

简而言之,在另一个 DAO 中使用一个 DAO 中的方法是一种不好的做法吗?我试图在 DAO 中创建一个实体,但发现仅使用该 DAO 很难创建该实体。那么,在另一个 DAO 中使用其他 DAO 方法是否可以?

例子:

public function readAllUsers() {
$sql = "SELECT * FROM user";
return $this->execute($sql);
}

public function execute($sql) {
$result = mysql_query($sql, $this->getDBConnection())
or die(mysql_error());
$user = array();
if(mysql_num_rows($result) > 0) {
for($i = 0; $i < mysql_num_rows($result); $i++) {
$row = mysql_fetch_assoc($result);
$user[$i]->setUsername(row["userName"]);
...set user info...
$user[$i]->setAddresses($addressDAO->readAddressByUserId($userId));
}
}
return $user;
}

注意:在用户实体中有很多这样的属性与实体本身具有一对多关系(地址、电子邮件、电话号码等)。所需的查询(以及使用的所有链接表)将非常复杂。

谢谢,

史蒂夫

最佳答案

不,我根本不会那样做。

听起来你想建立一个一对多的关系模型,所以你希望使用内部 DAO 来获取许多对象,然后将它们映射到一个。

抵制这种诱惑。

您的代码告诉您原因:

  1. 外层循环带回 N 个具有一对多关系的对象。
  2. 内部循环为 N 个对象中的每一个查询一次并取回其依赖项。

经典菜鸟 N+1 查询错误。对于大 N,网络延迟会杀死你。

正确的做法是执行一次查询,一次带回所有数据并将其映射到相关对象中。

也许像 Hibernate 这样的 ORM 工具会很合适。如果您有很多 1:m 关系,我敢打赌 Hibernate 在生成高效 SQL 方面会做得和您一样好,甚至更好。

关于php - 在另一个 DAO 中使用一个 DAO——好的还是坏的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114195/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com