数据访问层和数据库抽象层之间的区别以及重构数据库类

时间:2012-02-13 15:08:04

标签: php mysql oop data-access-layer database-abstraction

  

可能重复:
  What is the difference between Data Abstraction Layer & Data Acess Layer?

我刚刚在nettuts上阅读了this article。我有点困惑。 数据访问层数据库抽象层之间有什么区别?

另外,我应该为此制作自己的自定义类,还是使用PDO更好?

我有一个类DatabaseOps,它执行所有CRUD操作。其他类(例如User)继承自它,并使用此类中的方法来执行CRUD操作。我有另一个名为Database的类,它执行开放连接,关闭连接,获取数组,确认查询等。 我应该将它们写入单个类(数据访问/抽象层)吗?哪一个更好?

2 个答案:

答案 0 :(得分:6)

数据访问层通常采用ORM的形式。这允许您将表映射到对象。它提供了高级抽象,因此您不必担心原始sql。 http://en.wikipedia.org/wiki/Data_access_layer

数据抽象层创建一个api,使数据访问后端独立。无论您使用的是postgres,mysql,sqlite等,它都可以让您查询这些数据库,而无需担心具体细节。 http://en.wikipedia.org/wiki/Database_abstraction_layer

如果您正在创建一个其他人可以使用的平台,并且他们可以选择他们的数据库后端,则需要一个抽象层,否则我不会担心它。

每当我对Web项目结构有疑问时,我总是会看一下流行的MVC框架,看看他们是如何处理这些问题的。 CakePHP,CodeIgniter,Kohana都是如何创建可扩展面向对象框架的很好的例子。在涉及到这样的问题时,它们是不可或缺的资源。

答案 1 :(得分:2)

我不是一个完美的程序员,但是从我所看到/学到的东西来看,责任分离是很重要的。这就是为什么抽象层被如此重要地教导的原因。

这就是我看待它的方式。问这些问题......

  1. 您是否始终只使用一种类型的数据库?
  2. 如果您计划使用多种类型的数据库(或者只是计划制作一个更容易配置的项目......我建议),那么所有数据库命令(包括CRUD)都具有相同的语法访问,删除,插入......? (很可能他们没有)
  3. 在我看来,如果我不得不回答这些问题,我会将这两个课程放在一起。这样,如果您的数据库确实发生了变化,您可以相当轻松地添加一个新的抽象层来调用具有访问权限和CRUD命令,而不是创建两个不同的类。

    P.S。好问题! 1