我开发 Web 应用程序已经有一段时间了,我对 mySql 非常满意,事实上,我几乎每天都使用某种形式的 SQL。我喜欢这种语法,并且编写查询或优化表的问题为零。我很喜欢这个mysql api .
一直困扰我的是 Ruby on Rails 使用 ActiveRecord 并迁移所有内容,因此您可以使用函数来查询数据库。我想这个想法是你“永远不必再看 SQL”。也许这不是 KISS(保持简单愚蠢),但是 ActiveRecord 界面真的是最好的吗?如果是这样为什么?
无需编写 SQL 语句的开发是否健康?如果您需要查找尚未定义为 Rails 函数的内容怎么办?我知道他们有一个功能可以让我进行自定义查询。我想我真的想知道人们认为使用 ActiveRecord 相对于 mySQL 的优点是什么,如果有人像我一样觉得这对于 Rails 社区来说可能就像计算器对于数学社区一样,有些人可能会忘记如何长时间做部门。
最佳答案
你是对的,将 SQL 隐藏在 ActiveRecord 层后面意味着人们可能会忘记检查生成的 SQL。我自己也被这个问题困扰过:缺少索引、低效查询等等。
ActiveRecord 让简单的事情变得简单:
Post.find(1)
对比
SELECT * FROM posts WHERE posts.id = 1
作为开发人员,您需要输入的内容较少,因此出错的机会也较少。
验证是 ActiveRecord 使之变得简单的另一件事。无论如何你都必须这样做,那么为什么不找一个简单的方法来做到这一点呢?将重复、无聊的部分抽象出来?
class Post < ActiveRecord::Base
validates_presence_of :title
validates_length_of :title, :maximum => 80
end
对比
if params[:post][:title].blank? then
# complain
elsif params[:post][:title].length > 80 then
# complain again
end
同样,易于指定,易于验证。想要更多验证吗?添加到 ActiveRecord 模型的单行。具有多个条件的复杂代码总是更难调试和测试。为什么不让你轻松一点呢?
相对于 SQL,我真正喜欢 ActiveRecord 的最后一点是回调。回调可以用 SQL 触发器来模拟(仅在 MySQL 5.0 或更高版本中可用),而 ActiveRecord 从那时起就已经有了回调(我从 0.13 开始)。
总结一下:
- ActiveRecord 让简单的事情变得简单;
- ActiveRecord 消除了无聊、重复的部分;
- ActiveRecord 不会阻止您 writing your own SQL (通常出于性能原因),最后;
- ActiveRecord 在大多数数据库引擎中都是完全可移植的,而 SQL 本身(有时)则不然。
我知道在你的例子中你正在专门谈论 MySQL,但仍然如此。有这个选择很好。
关于mysql - 为什么使用 ActiveRecord 而不是 MySql API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161108/