我是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