我遇到了几个最近宣布计划将其实现从活动记录转移到数据映射器的ORM.我对这门学科的知识非常有限.所以,对于那些更了解情况的人来说,数据映射器比活动记录更新吗?活动唱片运动开始的时候是吗?这两者是如何联系在一起的?

最后,由于我不是数据库人员,对此主题知之甚少,我是否应该遵循正在迁移到Data Mapper实现的ORM,就像作为编写软件的人(而不是数据人员)对我有什么好处一样?

推荐答案

DataMapper并不更现代或更新,只是更适合ORM.

人们改变的主要原因是因为ActiveRecord does not make for a good ORM.AR wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.所以根据定义,AR是数据库记录的1:1表示,这使得它特别适合于简单的CRUD.

一些AR增加了对相关数据的提取,这让人们相信AR是一种ORM.不是的.对象关系管理的要点是在您的数据库 struct 和域对象之间撞击object relational impedance mismatch.使用AR时,您无法解决此阻抗不匹配问题,因为您的AR表示的是数据库行,而不是正确的OO设计.您正在将数据库布局绑定到对象.但是,仍然可以应用一些对象关系行为模式(例如,延迟加载).

AR经常受到批评的另一个原因是它混合了两个问题:业务逻辑和数据库访问逻辑.这会导致不需要的耦合,并会降低大型应用程序的可维护性和灵活性.这两层之间没有隔离.耦合总是导致灵活性降低.

A DataMapper另一方面,moves data between objects and a database while keeping them independent of each other and the mapper itself.虽然实现起来比较困难,但它允许在您的应用程序中进行更灵活的设计.您的域对象不再需要与数据库 struct 匹配.DAL和域层是解耦的.

Database相关问答推荐

包含接受Cassandra中多个数据的语句

mongodb聚合从另一个查询中获取值

在哪里存储 PHP 应用程序的数据库登录凭据

有使用 H2 数据库的实际经验吗?

我们如何使用 Hibernate 和 JPA 调用存储过程?

查询最后一天、上周、上个月SQLite

是否可以使用 Mongo 的 Object ID作为其唯一标识符?如果是这样,如何将其转换为字符串并按字符串查找?

ODBC 与 JDBC 与 ADO.NET

在 MS SQL 中使用 GUID 作为主键是不是一个坏主意?

免费的便携式数据库有哪些?

为什么在连接表上有一个主键不好?

在单个 postgres 查询中多次调用 `now()` 是否总是给出相同的结果?

有没有一种简单的方法来告诉 alembic 迁移到特定版本?

如何动态更改 Ruby on Rails 中所有模型的 Active Record 数据库?

ORM 还是Vietnam of Computer Science吗?

如何在数据库中获取原始的created_at值(不是转换为 ActiveSupport::TimeWithZone 的对象)

从数据库中获取事件

多币种 - 存储什么以及何时转换?

使用 Sinatra 时与数据库对话的最佳方式是什么?

在 UI 中执行业务逻辑的单元测试数据库应用程序