什么是持久性引擎(如ActiveRecord)?好处?缺点是什么?

时间:2009-12-21 07:23:57

标签: activerecord persistence

我听过所有关于Rail的持久性引擎(ActiveRecord)的讨论。我对它进行了搜索,但我无法清楚地知道它做了什么。它似乎是一个Object映射到数据库,但这就是我想出来的。如果是这样,他们将对象保存到数据库以保持持久性?使用这个模型有什么好处?有什么缺点?

谢谢! 马特穆勒

1 个答案:

答案 0 :(得分:3)

Active Record基本上是一种将类映射到关系数据库表的模式。对象表示数据库中的行。 AR框架通过为每个数据库引擎生成适当的SQL语句来处理这些对象的保存和加载。

示例

Database Table              Active Record Class
-----------------------     --------------------------
People                   >  Person
-----------------------     --------------------------
FirstName : varchar(40)  >  string FirstName
LastName  : varchar(40)  >  string LastName

该框架为您提供了以独立于数据库的方式检索数据的通用方法,这种方法可以很好地与编程语言集成。

people = Person.GetAll()

生成并执行以下内容:

SELECT FirstName, LastName FROM People

它正在做的是读取AR类的结构并推断列名。检索到的数据也以相同的方式映射回类。

这样做的主要优点是您可以删除对单个数据库引擎的依赖性。例如,如果您决定从MySQL切换到SQLite,正确编码的AR框架可以在几乎不更改现有代码的情况下执行此操作。

但是,缺点是您受到正在使用的特定AR框架的支配。如果它在某种情况下没有生成正确的SQL或者不支持特定的功能,那么您可能不得不回头自己编写它,这会破坏数据库独立性的目的。