假设我有以下内容:
TeamGamesDao 班级:
public function listOfTeams() {
$select = $this->select()
->from(array('t'=>'teams'), array('cod_team','name','score'));
$rows = $this->fetchAll($select);
foreach($rows as &$row) {
$total = ????????????????????????????????
$done = $this->_getTeamsGamesDone($row['teamid']);
$row['percentage_of_games_done'] = $total > 0 ? ($done*100)/$total : 0);
}
return $rows;
}
private function _getTeamsGamesDone($teamid) {
/* ... */
}
那就是????????是一个值来自 GamesDao Class 的公共方法,其定义如下:getTotalGames();
我们应该如何在listOfTeams()上调用它?
我们应该实例化它还是静态地称它,或者第三种可能性?
提前致谢,
MEM
答案 0 :(得分:1)
简而言之,使用静态方法使多态无法实现。结果,它使代码更难以测试(隔离依赖性)并且通常不易扩展。另一方面,如果DAO实例作为依赖项传递给类,那么它将使测试更容易,并允许在运行时交换DAO的不同实现。
答案 1 :(得分:1)
这里要注意的一件事是GameDao类对getTotalGames()
的调用发生在foreach($rows as &$row)
循环中。假设getTotalGames()
方法执行自己的db查询,那么在循环的每次迭代中你都会遇到db一次,这通常是不受欢迎的。
另一种方法可能是重写方法以对包含COUNT()
和GROUP BY
的游戏和团队表执行连接,以获得每个团队的游戏数量。
然后你仍然可以遍历你的团队,但它只会一次点击数据库。