什么是更好的做法?检索对象或object.id?

时间:2013-07-26 19:34:25

标签: ruby coding-style conventions calling-convention

这是一个更普遍的问题。它可能是愚蠢的,但由于我经常遇到这种困境 - 决定问。

我有一个函数(在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。

2 个答案:

答案 0 :(得分:1)

在这种情况下,我更喜欢第二种方法。它们可能在功能上是等价的,但是如果出现错误(例如调用nil.id),在函数中处理它会更有意义,这样在发生故障时更容易调试。

对于第一种方法,传入nil不会导致错误,而是返回一个空数组。所以可能很难知道为什么你的结果不符合你的预期。第二种方法会抛出一个标志并告诉您错误的确切位置。如果你想通过返回一个空数组来处理这种情况,你可以明确地这样做。

正如迈克尔所说,如果您愿意,通过整个物体也可以让您灵活地在路上进行其他操作。我没有看到评估id然后将其传递给方法有很多好处,除非您已经拥有该ID而无需实例化该对象。 (这对第一个选项来说是一个引人注目的用例)

答案 1 :(得分: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