2010-03-10 23 views

回答

3

区别在于您的域对象与数据访问层的分离程度如何。使用ActiveRecord,它的所有对象,使得它非常简单。特别是如果你的班级一对一地映射到你的数据库。 数据映射器更加灵活,并且可以轻松地让您的域独立于任何数据访问基础架构代码进行测试。但复杂性是有代价的。

0

我不得不承认,我不知道学说刮骨刀但我至少可以给一些见解的活动记录之间的差额作为Ruby实现与奥姆斯如亚音速,LINQ到SQL,NHibernate的和Telerik。希望它至少会给你一些进一步探索的东西。

Ruby的活动记录是其本地数据访问库 - 它不是从现有的SQL接口库(例如.NET SqlDataTables)映射到语言的结构 - 它接口库。这为设计者提供了更加灵活的构建库的方式,但它也要求他们实现一系列SQL工具,而这些工具通常不会在ORM中找到(例如,DDL命令是Ruby的Active Record界面的一部分)。

的ORM是使用手动步骤,其中一个码发生器将打开一个数据库,并通过它扫描映射到底层数据库结构 - 建立对应于该台(和存储过程)它找到对象。这些对象是使用作为语言一部分提供的低级SQL编程结构(例如,.NET System.Data.Sql和SqlClient库)构建的。这里的目标是在编程时为记录导向的关系数据库提供一个更流畅,更流畅的界面:减少关系模型和面向对象编程之间的“阻碍不匹配”。

作为一个备注,MS通过Linq to SQL和Linq to Entities将本机语言结构构建到C#中,采取了非常“活跃记录”的步骤。

希望这会有所帮助!

1

的主要区别是,在DataMapper的模型在红宝石类本身定义:

class Post 
    include DataMapper::Resource 

    property :id,   Serial 
    property :title,  String 
    property :body,  Text 
    property :created_at, DateTime 
end 

虽然ActiveRecord的类主要是一个空类和framwork扫描数据库。这意味着您需要一个预定义的数据库或使用类似迁移的东西来生成模式,这将使数据模型与ORM分离。

DataMapper.auto_migrate! 

会为您生成架构。

ActiveRecord的是在这方面的不同:

class Post < ActiveRecord::Base 
end 

在DataMapper的,没有必要迁移,因为automigrations可以生成模式或看模型和数据库之间的差异,并迁移为您服务。还支持您可以用于非平凡情况的手动迁移。

此外,DataMapper更加“ruby”语法友好,并且在执行可链接条件(如Rails 3中的ActiveRecord)时具有延迟加载功能。

Datamapper还具有数据库中的每个记录都映射到一个ruby对象的功能,对于ActiveRecord来说这不是真的。所以如果你知道数据库记录是相同的,那么你知道对ruby对象的两个引用也会指向同一个对象。

另一方面,虽然Rails 3可能会向您提供可交换的框架,但Datamapper railtie(dm-rails)并未准备好生产,许多功能可能无法正常工作。

有关更多信息,请参阅此page

1

就像blockhead说的,区别在于你如何选择将域对象与数据访问层分开。

简而言之,活动“记录”将对象映射到数据库中的记录。

这里,一个对象=一条记录。

据我所知,数据“映射器”映射一个对象与数据,但它不需要记录 - 它也可以是一个文件。

这里,一个对象不一定是一个记录

这是这种方式,因为这种模式的目标:保持在内存中的代表性和相互独立的持久性数据存储和数据映射器本身。

通过不放置这1个对象= 1记录限制,数据映射器使这两个层相互独立。

对我的答案的任何建议/更正是值得欢迎的,以防我在某个地方出错。

相关问题