data-access-layer - 数据库抽象层和数据访问层有什么区别?

标签 data-access-layer 3-tier dbal doctrine-dbal

我实际上被困在三层结构中。我在网上冲浪,发现了两个术语“数据库抽象层”和“数据访问层”。

两者之间有什么区别?

最佳答案

我的理解是数据访问层实际上并不抽象数据库,而是使数据库操作和查询构建更容易。

例如,数据访问层通常具有与 SQL 语法非常相似的 API,但仍需要了解数据库结构才能编写:

$Users->select('name,email,datejoined')->where('rank > 0')->limit(10);

数据抽象层通常是完全成熟的 ORM(对象关系映射器),理论上可以防止需要了解任何底层数据库结构或具有任何 SQL 知识。语法可能是这样的:
Factory::find('Users', 10)->filter('rank > 0');

并且所有对象都可能被所有字段完全填充,如果您以这种方式设置,则可能与任何父对象或子对象连接。

然而,这种抽象是有代价的。我个人认为 ORM 之类的学说或推进是不必要且低效的。在大多数情况下,一个简单的数据访问层就可以了,对于需要特别注意的任何事情,都可以使用手动 SQL,而不必因为某些语法糖而破坏应用程序的性能。这个领域是一个非常激烈的辩论,所以我不会再深入了。

如果您指的是数据 底座 抽象层,那么它将是类似于 PDO 的东西,这样您的代码就可以用于更多的数据库供应商。我相信 PDO 可以与 MySQL、PostgreSQL 和 mysqli 等一起使用。

关于data-access-layer - 数据库抽象层和数据访问层有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838661/

相关文章:

c# - 在 Entity Framework 中使用动态 where 子句

c# - 在 3 层架构中使用 DTO

Symfony : how to set SSL parameters in Doctrine DBAL configuration (YAML)?

docker - 如何通过docker容器正确使用Silex 2,Doctrine和PDO?

asp.net - Entity Framework 与数据访问层

不允许使用 Orm 工具 : What do you do?

python - django中业务逻辑和数据访问的分离

c# - Entity Framework 与 ASP.NET WebForms 应用程序的最佳实践

java - 三层架构的正确性

doctrine-orm - 如果数据库不存在,则从 DBAL 级别创建数据库