gpt4 book ai didi

ruby-on-rails - 为什么所有的 Active Record 都讨厌?

转载 作者:行者123 更新时间:2023-12-03 04:48:06 25 4
gpt4 key购买 nike

随着我对 OOP 的了解越来越多,并开始实现各种设计模式,我不断回到人们讨厌 Active Record 的案例。 .

人们常常说它的扩展性不好(以 Twitter 为例)——但没有人真正解释为什么它的扩展性不好;和/或如何在没有缺点的情况下实现 AR 的优点(通过类似但不同的模式?)

希望这不会变成一场关于设计模式的圣战——我只想知道****具体**** Active Record出了什么问题。

如果它不能很好地扩展,为什么不呢?

它还有哪些其他问题?

最佳答案

ActiveRecord the Design PatternActiveRecord the Rails ORM Library ,而且还有大量 .NET 和其他语言的仿制品。

这些都是不同的事情。他们大多遵循该设计模式,但以多种不同的方式扩展和修改它,因此在有人说“ActiveRecord 很糟糕”之前,需要通过说“哪个 ActiveRecord,有堆?”来限定它。

我只熟悉 Rails 的 ActiveRecord,我会尝试解决在使用它时提出的所有投诉。

@BlaM

The problem that I see with Active Records is, that it's always just about one table

代码:

class Person
belongs_to :company
end
people = Person.find(:all, :include => :company )

这会生成带有 LEFT JOIN companies on companies.id = person.company_id 的 SQL ,并自动生成关联的 Company 对象,以便您可以执行 people.first.company并且它不需要访问数据库,因为数据已经存在。

@pix0r

The inherent problem with Active Record is that database queries are automatically generated and executed to populate objects and modify database records

代码:

person = Person.find_by_sql("giant complicated sql query")

不鼓励这样做,因为它很难看,但对于您只是简单且只需要编写原始 SQL 的情况,这很容易完成。

@Tim Sullivan

...and you select several instances of the model, you're basically doing a "select * from ..."

代码:

people = Person.find(:all, :select=>'name, id')

这只会从数据库中选择名称和 ID 列,映射对象中的所有其他“属性”都将为零,除非您手动重新加载该对象,等等。

关于ruby-on-rails - 为什么所有的 Active Record 都讨厌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com