Mar*_*328 6 php database orm abstraction design-patterns
我的问题是如何从应用程序的模型层抽象数据库连接?主要关注点是能够轻松地从不同类型的数据库进行更改.也许你从一个平面文件,逗号分隔的数据库开始.然后,您想要移动到SQL数据库.然后您决定LDAP实现会更好.一个人如何轻松地计划这样的事情?
举一个简单的例子,假设您有一个名字,姓氏和电子邮件的用户.表示它的非常简单的PHP类可能如下所示(请忽略公共实例变量的问题):
<?php
class User {
public $first;
public $last;
public $email;
}
?>
Run Code Online (Sandbox Code Playgroud)
我经常看到人们有一个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 );
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我这样的策略的问题是当你想要改变你的数据库时,你必须改变每个DAO类的创建,更新,加载,删除功能来处理你的新类型的数据库.即使你有一个程序为你自动生成它们(我不是特别喜欢它),你必须编辑这个程序才能使它现在正常工作.
你对如何处理这个问题有什么建议?
我目前的想法是为DAO对象创建一个超类,它有自己的创建,删除,更新,加载函数.但是,这些函数将获取DAO属性的数组并生成查询本身.通过这种方式,唯一的SQL是在SuperDAO类中,而不是分散在几个类中.然后,如果要更改数据库层,则只需更改SuperDAO类生成查询的方式.好处?缺点是什么?可预见的问题?黄金三镖客?
您可以使用各种框架,例如PDO,PEAR :: MDB2或Zend_Db,但老实说,在12年的PHP开发中,我从未必须从一种类型的数据存储基础架构过渡到另一种类型.
甚至从像Sqlite这样非常相似的东西到MySQL也是极为罕见的.如果你确实做得更多,那么无论如何你都会遇到更大的问题.
| 归档时间: |
|
| 查看次数: |
11535 次 |
| 最近记录: |