3

モデルまたはコントローラーに 2 つのメソッドがあり、メソッド間で変数を渡したい場合など

def foo
  @param = 2
  @test = 1
  callee
  #do something with @test
end

def callee
  @test += @param
end

これを行うにはインスタンス変数を使用する方が良いですか、それとも通常の変数を使用する方が良いですか?

def foo
  param = 2
  test = 1
  test = callee(param, test)
  #do something with test
end

def callee(param, test)
  test += param
  test
end

前もって感謝します!

4

2 に答える 2

2

この質問に対する明確な答えはありません。コンテキストに大きく依存します。質問する必要があるのは、「どのアプローチがコードの意図を最もよく表しているか」です。話しているモデル/コントローラークラスのテストは間違いなく必要です。

非常に大まかなガイドラインとして:

最初のアプローチは、メソッドがクラスのパブリック API の一部であり、クラスのインスタンスの内部状態を変更する場合によく見られます (ただし、例のようにチェーンされたパブリック メソッドがある場合は、コードの匂いの兆候である可能性があります)。これは、おそらくモデル オブジェクトでより頻繁に見られるでしょう。

2 番目の方法は通常、呼び出しているメソッドがコードの重複を除外するプライベートな便利なメソッドである場合、またはパラメーターに対して非常に特殊な操作を実行して何らかの結果を返すメソッドである場合に見られますユーティリティ クラスです。) これは、モデルまたはコントローラー オブジェクトで見られる場合があります。

保守可能な OO コードを目指している場合、SOLID 設計の原則は非常に優れたガイドラインです。Bob おじさんの記事を参照してください。

http://blog.objectmentor.com/articles/2009/02/12/getting-a-solid-start

于 2012-07-24T08:10:43.313 に答える
1

それはあなたのニーズに依存します。また、変数を渡す関数のプロトタイプも重要です。メソッドが許可なくパラメータを変更しないようにする場合は、2番目の実装を使用する必要があります。ただし、関数を信頼する場合は、最初の方法を使用できます。これは、「参照による呼び出し」および「値による呼び出し」と呼ばれる大きなトピックです。次のリンクを調べることができます。

http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html

于 2012-07-24T07:47:02.813 に答える