1

これはより一般的な質問です。ばかげているかもしれませんが、私は常にこのジレンマを抱えているので、質問することにしました。

私には関数があり (Rails問題がある場合)、大規模なアプリを作成するときにどのアプローチがベストプラクティスであり、より一般的であるか疑問に思っていました。

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

ここでは、たとえば 12 を受け取りますid_of_someobject

また

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

ここでは、クラス オブジェクトを取得し、オブジェクト属性「id」をトリガーして ID を取得します。

4

2 に答える 2

1

この場合、2 番目の方法をお勧めします。それらは機能的に同等かもしれませんが、エラーが発生した場合 (nil.id の呼び出しなど)、関数内でそれを処理する方が理にかなっており、失敗した場合のデバッグが容易になります。

最初のアプローチでは、nil を渡してもエラーにはなりませんが、空の配列が返されます。そのため、結果が期待したものと異なる理由を知るのは難しい場合があります。2 番目のアプローチでは、フラグがスローされ、エラーの正確な場所が示されます。空の配列を返すことでそのケースを処理したい場合は、明示的に行うことができます。

Michael が述べたように、オブジェクト全体を渡すと、必要に応じて他の操作を実行する柔軟性も得られます。オブジェクトをインスタンス化せずにその ID を既に持っていない限り、ID を評価してからメソッドに渡すことにはあまりメリットがありません。(これは、最初のオプションの説得力のある使用例です)

于 2013-07-26T21:32:59.060 に答える