0

私の質問を再開するためのタイトルを考え出そうとして悪夢を見ていました。

とにかく、私の質問は本当に簡単です。これを行う方が良いですか:

Private TxtbxUserName As New TextBox With {.Text= "XXXX"}

Private Sub DoSomething(ByVal TextBoxText as string)
    Dim Text as String = TextBoxText
End Sub

またはこれを行うには?:

Private TxtbxUserName As New TextBox With {.Text = "XXXX"}

Private Sub DoSomething()
     Dim Text as String = TxtbxUserName.text
End Sub

また、各方法の具体的な利点は何ですか?

4

2 に答える 2

2

状況に応じて両方のオプションが望ましい場合があるため、このような単純化された例で言うのは難しいです。ただし、一般的に言えば、コントロールから直接値を取得するよりも、(最初の例のように) 値を引数として取得することをお勧めします。理由はいろいろありますが、以下のようなことが思い浮かびます。

  • Reusability- 別のコントロール、ファイル、メッセージ、またはその他の場所から値を取得する場合でも、どこからでもメソッドを呼び出すことができます。
  • Readability- コードが何をしているのか、その理由を簡単に理解できる
  • Testability- UI に触れることなく、コードにさまざまな値を渡して結果をテストできるため、コードのテストが容易になります。

原則として、コントロールから値をできるだけ早く (通常はコントロールのイベントですぐに) 取得し、その値をパラメーターとしてさまざまなビジネス メソッドに渡す必要があります。コントロールを結果で更新する必要がある場合は、コントロールをできるだけ遅く設定する必要があります。ビジネス メソッドは、コントロールの値を直接設定するのではなく、値を返す必要があります。

ただし、そうは言っても、UI を完全に、または少なくともほぼ完全に処理するメソッドがある場合は、コントロールを直接操作することが理にかなっています。たとえば、UI のノード レイアウトを定義する XML ファイルからのデータをツリー コントロールに入力する場合、メソッドでツリー コントロールに直接アクセスすることが理にかなっている場合があります。データをある種のツリー データ構造にロードして、ツリー データ構造を読み込んでツリーにデータを入力することは必ずしも意味がありません。場合によります。基本的に、それが UI ヘルパー メソッド (特定のコントロールを操作しやすくするためのもの) である場合、場合によっては、コントロールを直接操作することが理にかなっています。それ以外の場合、それが標準的なビジネス ロジック メソッドである場合は、

于 2013-09-23T18:49:26.040 に答える
0

Steven Doggart が書いたように、関数を使用する方が理にかなっている可能性があります。

Private Function DoSomething(ByVal target As Control) As String
    Return target.Text
End Function

副作用を作成していないため、例の場合、副作用はメソッドの範囲外にある変数を変更しています。

于 2013-09-23T19:39:18.030 に答える