2013-10-07 30 views
-1

一位同事和我正在我們的Rails應用程序中實現一個存儲庫模式,該模式從ActiveRecord中抽象出來。我們今天注意到,我們還不支持查找數組。在嘗試這樣做時,我們想出了許多不同的可能方式來編寫它。極端迂腐的Ruby風格辯論

的四種可能性在本要點概述:https://gist.github.com/jseakle/6875446

我的同事最初贊成#1。我更喜歡#2,因爲它更接近AR的實現方式,因此不太可能導致開始使用此代碼的新開發人員感到困惑。但是後來他提出了爭論名稱現在存在的問題,所以我們在3中產生了這個想法。但是當然,這個名字因爲被使用而在說謊,所以我們提出了4,它解決了所有的理論問題,但非常長,只是有點傻。

我想知道你認爲哪一個最好,以及你看到的每個優點和缺點。

+0

不要將代碼直接關係到你的問題在另一個網站上。你要求我們追逐它,這會阻止潛在的回答者,再加上一旦鏈接腐爛,它會讓你的問題變得毫無價值。由於這個問題確實在徵求意見,我認爲這不會持續太久。 –

回答

1

我同意w /克里斯。

def find(*ids) 
    @source.find(*ids) 
end 

會工作,如果@sourceActiveRecord::Base一個實例,並且可以被稱爲像

find(1) 
find(1,2,3) 
find([1,2,3]) 

所以它也非常靈活的鏈路

0

我認爲#1是最清楚的,在這一點上,我會說這是最重要的。這並不總是我的鑑別者,但是這個例子的線條最少,和/或最短的線條最簡單的表達。它只是像人們所期望的那樣讀取。我的意見,當然。

0

我贊成選項一。我不喜歡檢查特定的類型,但檢查它能夠像數組一樣行爲/響應find_all。

1

ActiveRecord::Base#find接受盡可能多的id,你可以將它作爲單獨的參數或數組來使用。我會說最乾淨的方法就是發送n ID作爲n單獨的參數。即:

[1] pry(main)> ids = 1 
=> 1 
[2] pry(main)> Project.find(*ids) 
    Project Load (0.4ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT 1 [["id", 1]] 
=> #<Project:0x3fedc17ad980> 
[3] pry(main)> ids = [1,2,3] 
=> [1, 2, 3] 
[4] pry(main)> Project.find(*ids) 
    Project Load (0.8ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 2, 3) 
=> #<Array:0x3fedc251ba54> 
[5] pry(main)> Project.find(ids) 
    Project Load (0.7ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 2, 3) 
=> #<Array:0x3fedc2fc8164> 

因爲*foo是針對一個單一的對象或對象的集合安全,我建議,這是最乾淨的。