There's ActiveRecord 设计模式 http://en.wikipedia.org/wiki/Active_record_pattern and ActiveRecord Rails ORM 库 http://api.rubyonrails.com/classes/ActiveRecord/Base.html,而且还有大量 .NET 和其他语言的仿冒品。
这些都是不同的事情。他们大多遵循该设计模式,但以多种不同的方式扩展和修改它,因此在有人说“ActiveRecord 很糟糕”之前,需要通过说“哪个 ActiveRecord,有堆?”来限定它。
我只熟悉 Rails 的 ActiveRecord,我将尝试解决在使用它时提出的所有投诉。
@BlaM
我发现 Active Records 的问题是,它总是只有一张表
Code:
class Person
belongs_to :company
end
people = Person.find(:all, :include => :company )
这会生成 SQLLEFT JOIN companies on companies.id = person.company_id
,并自动生成关联的 Company 对象,以便您可以执行以下操作people.first.company
并且它不需要访问数据库,因为数据已经存在。
@pix0r
Active Record 的固有问题是自动生成并执行数据库查询来填充对象和修改数据库记录
Code:
person = Person.find_by_sql("giant complicated sql query")
不鼓励这样做,因为它很难看,但对于您只是简单且只需要编写原始 SQL 的情况,这很容易完成。
@蒂姆·沙利文
...并且您选择模型的多个实例,您基本上是在执行“select * from ...”
Code:
people = Person.find(:all, :select=>'name, id')
这只会从数据库中选择名称和 ID 列,映射对象中的所有其他“属性”将为零,除非您手动重新加载该对象,等等。