举个简单的例子,假设你有一个用户,有名字、姓氏和电子邮件地址。一个非常简单的PHP类表示它可能看起来像这样(请忽略公共实例变量的问题):
<?php
class User {
public $first;
public $last;
public $email;
}
?>
我经常看到人们有一个DAO类,其中包含嵌入的SQL语句,如下所示:
<?php
class UserDAO {
public $id;
public $fist;
public $last;
public $email;
public function create( &$db ) {
$sql = "INSERT INTO user VALUES( '$first', '$last', '$email' )";
$db->query( $sql );
}
}
?>
我对这样的策略存在疑虑,因为当您想要更改数据库时,您必须更改每个 DAO 类的 create、update、load、delete 函数以处理新类型的数据库。即使您有一个自动生成它们的程序(我不特别喜欢),您也需要编辑此程序以使其现在工作。
您有什么解决方案来处理这个问题?
我的当前想法是创建一个 DAO 对象的超级类,具有其自己的 create、delete、update、load 函数。但是,这些函数将采用 DAO 属性数组并生成查询本身。通过这种方式,唯一的 SQL 在 SuperDAO 类中,而不是分散在几个类中。然后,如果您想要更改数据库层,您只需更改 SuperDAO 类如何生成查询。优点?缺点?可预见的问题?好的,坏的和丑陋的东西?