【问题标题】:Difference between Data Access layer and Database Abstraction Layer and refactoring the Database class [duplicate]数据访问层和数据库抽象层之间的区别以及重构数据库类[重复]
【发布时间】:2012-03-04 23:40:43
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    数据访问层通常采用 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 都是如何创建可扩展的面向对象框架的好例子。当涉及到此类问题时,它们是不可或缺的资源。

    【讨论】:

    • 那么,PHP 的 PDO 可以称为数据访问层吗? ...以及我从您的回答中得到的信息 - CodeIgniter、CakePHP 等 Web 框架实现了数据抽象层。对吗?
    【解决方案2】:

    我不是完美的程序员,但根据我的所见所闻,职责分离很重要。这就是为什么如此大量地教授抽象层的原因。

    这就是我的看法。问这些问题...

    1. 您会始终只使用一种类型的数据库吗?
    2. 如果您确实计划使用一种以上类型的数据库(或者只是计划制作一个更易于配置的项目...我建议这样做),那么所有数据库命令(包括 CRUD)都具有相同的语法访问、删除、插入……? (他们可能不会)

    在我看来,如果我必须回答这些问题,我会将这两个课程放在一起。这样,如果您的数据库确实发生了变化,您可以相当轻松地添加一个新的抽象层来调用,该抽象层具有访问和 CRUD 命令,而不是创建两个不同的类。

    附:好问题! +1

    【讨论】:

    • 这确实是一个很好的解释!希望我能对此 +2 ......好吧,我现在没有使用多个数据库。但我可能不得不在不久的将来。那我该怎么办?我应该现在就去做,还是以后再做?
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多