2013-07-26 34 views
1

這是一個更普遍的問題。它可能是愚蠢的,但因爲我經常有這個困境 - 決定問。有什麼更好的做法?檢索對象或object.id?

我有一個函數(在Rails,如果它很重要),我想知道哪種方法是最好的做法,編寫大型應用程序時更常見。

def retrieve_object(id_of_someobject) 
    # Gets class object ID (integer) 
    OtherObject.where('object_id = ?', id_of_someobject) 
end 

這裏例如它接收12 id_of_someobject

OR

def retrieve_object(someobject) 
    # Gets class object 
    OtherObject.where('object_id = ?', someobject.id) 
end 

在這裏它得到類對象,並通過觸發對象屬性的 'id' 獲得其ID。

+1

個人而言,我將對象本身發送給函數。我通常覺得這是一個不太麻煩的方法,如果你需要改變函數並需要訪問其他對象變量(而不僅僅是id)的話。性能方面,我相信這兩種選擇都是相同的,所以我想可以歸結爲個人偏好。 –

回答

1

在這種情況下,我更喜歡第二種方法。它們可能在功能上是等價的,但是如果發生錯誤(例如調用nil.id),則在函數內處理它更有意義,以便在發生故障時更易於調試。

對於第一種方法,傳入nil不會導致錯誤,而是會返回一個空數組。所以可能很難知道爲什麼你的結果不符合你的預期。第二種方法會拋出一個標誌,並告訴你該錯誤的確切位置。如果你想通過返回一個空數組來處理這種情況,你可以明確地這樣做。

正如邁克爾所說,傳遞整個對象也使您可以靈活地在路上執行其他操作,如果您願意的話。我沒有看到評估id然後將它傳遞給方法的好處,除非您已經擁有該ID而無需實例化對象。 (對於第一個選項,這將是一個引人注目的用例)

0

支持兩者。這只是一條線,這種方式你不必記住或關心。

def retrieve_object(id_or_someobject) 
    id = id_or_someobject.is_a?(SomeObject) ? id_or_someobject.id : id_or_someobject 
    OtherObject.where('object_id = ?', id) 
end 
+0

這種違反公約的情況下,通過配置參數......在較大的團隊中或者爲了加快週轉速度,可以強制自己和其他人以某種方式做到這一點。如果在每次查找之前必須檢查課程,看起來似乎沒有必要。 – tyler

+0

@tyler非常真實,但我假設你在其他地方找到一個或另一個,並且必須在那裏檢查。這只是代表檢查。如果你必須選擇,我會選擇ID。這樣你可以在不首先加載someobject的情況下執行retrieve_object(thirdobject.someobject_id)。 –

相關問題