【发布时间】:2010-10-19 16:32:02
【问题描述】:
我的问题是如何从应用程序的模型层抽象数据库连接?主要关注的是能够轻松地从不同类型的数据库进行更改。也许您从一个平面文件、逗号分隔的数据库开始。然后你想移动到一个 SQL 数据库。然后稍后您决定 LDAP 实现会更好。一个人怎么能轻松地计划这样的事情?
举个简单的例子,假设您的用户有名字、姓氏和电子邮件。一个非常简单的 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 类的创建、更新、加载、删除函数来处理您的新型数据库。即使你有一个程序可以为你自动生成它们(我不是特别喜欢它),你也必须编辑这个程序才能让它现在工作。
您对如何处理有什么建议?
我目前的想法是为 DAO 对象创建一个超类,具有自己的创建、删除、更新、加载功能。但是,这些函数将采用 DAO 的属性数组并生成查询本身。这样,唯一的 SQL 就在 SuperDAO 类中,而不是分散在几个类中。然后,如果你想改变你的数据库层,你只需要改变 SuperDAO 类生成查询的方式。优点?缺点?可预见的问题?好,坏,丑?
【问题讨论】:
标签: php database design-patterns orm abstraction