可能重复:
数据抽象层和数据访问层有什么区别?
我刚刚阅读了关于 nettuts的这篇文章。我有点困惑。数据访问层和数据库抽象层有什么区别?
另外,我应该为此制作自己的自定义类还是使用 PDO 更好?
我有一个DatabaseOps
执行所有 CRUD 操作的类。其他类(例如 User)继承自它并使用此类中的方法来执行 CRUD 操作。我有另一个名为的类Database
,它执行打开连接、关闭连接、获取数组、确认查询等。我应该将它们写入单个类(数据访问/抽象层)吗?哪一个会更好?
可能重复:
数据抽象层和数据访问层有什么区别?
我刚刚阅读了关于 nettuts的这篇文章。我有点困惑。数据访问层和数据库抽象层有什么区别?
另外,我应该为此制作自己的自定义类还是使用 PDO 更好?
我有一个DatabaseOps
执行所有 CRUD 操作的类。其他类(例如 User)继承自它并使用此类中的方法来执行 CRUD 操作。我有另一个名为的类Database
,它执行打开连接、关闭连接、获取数组、确认查询等。我应该将它们写入单个类(数据访问/抽象层)吗?哪一个会更好?
数据访问层通常采用 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 都是如何创建可扩展的面向对象框架的好例子。当涉及到此类问题时,它们是不可或缺的资源。
我不是完美的程序员,但根据我所见/所学,职责分离很重要。这就是为什么如此大量地教授抽象层的原因。
这就是我的看法。问这些问题...
在我看来,如果我必须回答这些问题,我会将这两个课程放在一起。这样,如果您的数据库确实发生了变化,您可以相当容易地添加一个新的抽象层来调用,它具有访问和 CRUD 命令,而不是创建两个不同的类。
PS 好问题!+1