我是DataMapper维护者,我认为对于复杂的报告,您应该使用SQL。
虽然我认为总有一天我们会有一个提供SQL的强大功能和简洁性的DSL,但到目前为止我看到的所有内容都要求您为复杂查询编写比SQL更多的Ruby代码。我宁愿维护5行SQL查询,而不是10-15行Ruby代码来描述相同的复杂操作。
请注意我说复杂..如果你有简单的东西,使用ORM的内置查找器。但是,我相信有一条线可以让SQL变得更简单。现在,大多数应用程序不仅仅是报告。你可能会有很多CRUD类型的操作,ORM非常适合并且比手动操作要好得多。
ORM通常会提供的一件事是某种组织到您的应用程序逻辑。您可以将基于每个模型的代码分组到同一个文件中。它通常是在那里我能摆出复杂的SQL查询,而不是将它嵌入控制器,例如:
class User
include DataMapper::Resource
property :id, Serial
property :name, String, :length => 1..100, :required => true
property :age, Integer, :min => 1, :max => 130
def self.some_complex_query
repository.adapter.select <<-SQL
SELECT ...
FROM ...
WHERE ...
... more complex stuff here ...
SQL
end
end
然后我就可以生成使用User.some_complex_query
报告。如果您想进一步清理此代码,您也可以将SQL查询推入视图。
编辑:通过上面的句子中的“视图”,我的意思是RDBMS视图,而不是在MVC上下文中查看。只是想澄清任何可能的混淆。
我还应该注意到,我认为ORM设计人员应该不断研究如何进一步推动这条线,以便更简单的查询可以比查找SQL更简单。我不确信我们会完全消除SQL。 – dkubb 2010-01-15 23:35:28
哪个ORM最适合使用新的Rails 3应用程序与传统的MySQL 5.1数据库?我不希望对这个数据库进行迁移(虽然架构可能会不时变化),但我一定会写信给它。 – 2010-11-13 21:46:28
马克,除非你的模式匹配ActiveRecord约定,你的选择是DataMapper和Sequel。显然,我偏向于Datamapper,但Sequel也是一个很好的ORM。我会说,DataMapper的主要目标之一是允许它映射到传统模式。如果您想在构建更复杂的查询时使用类似SQL的语句,续集会更好。 – dkubb 2010-11-16 02:41:16