0

メソッド呼び出しを実装するための最良/良い方法は何ですか。

例:以下から、一般的にベストプラクティスと見なされます。両方が悪い場合は、ベストプラクティスと見なされます。

オプション1 :

   private void BtnPostUpdate_Click(object sender, EventArgs e)
    {
        getValue();
    }

    private void getValue()
    {
        String FileName = TbxFileName.Text;
        int PageNo = Convert.ToInt32(TbxPageNo.Text);

        // get value from Business Layer
        DataTable l_dtbl = m_BLL.getValue(FileName, PageNo);

        if (l_dtbl.Rows.Count == 1)
        {
            TbxValue.Text = Convert.ToInt32(l_dtbl.Rows[0]["Value"]);
        }
        else
        {
            TbxValue.Text = 0;
        }
    }

オプション2:

    private void BtnPostUpdate_Click(object sender, EventArgs e)
    {
        String FileName = TbxFileName.Text;
        int PageNo = Convert.ToInt32(TbxPageNo.Text);

        int Value = getValue(FileName, PageNo);

        TbxValue.Text = Value.ToString();

    }

    private int getValue(string FileName, int PageNo)
    {
        // get value from Business Layer
        DataTable l_dtbl = m_BLL.getValue(FileName, PageNo);

        if (l_dtbl.Rows.Count == 1)
        {
            return Convert.ToInt32(l_dtbl.Rows[0]["Value"]);
        }
        return 0;
    }

ローカル変数を割り当てずにパラメーターを直接渡すことができることを理解しています...私の質問は、メソッド定義とその処理方法についてです。

4

3 に答える 3

6

イベントを自動的にサブスクライブしている場合、必要な「実際の」シグニチャ(この場合はパラメータなし)を持つメソッドに委任するだけのイベントハンドラシグニチャを持つメソッドがあることは特に悪いことではないと思います。 。

手動でサブスクライブしている場合は、代わりにラムダ式を使用できます。

postUpdateButton.Click += (sender, args) => PostUpdate();

次に、で作業を行いPostUpdateます。次に、を2つの方法に分割するかどうかPostUpdate、1つはUIインタラクションを処理する方法、もう1つはBLLインタラクションを処理する方法です。この場合、私はそれがあまり重要ではないと思います。

ただし、UIロジックを構造化してテスト可能にする方法は、まったく別の問題です。私は最近MVVMパターンのファンになりましたが、それが特定のシナリオにどのように適用できるかわかりません(実際には、SilverlightとWPFを中心に設計されています)。

ただし、他にもいくつかコメントがあります。

  • 従来、パラメータはPascalCasedではなくcamelCasedである必要があります
  • ローカル変数の前にプレフィックスを付けることでメリットが得られると心から信じていますl_か?彼らが地元にいることは明らかではありませんか?個人的には、ここに示されている変数名のほとんどには関心がありません。変数のタイプではなく、意味に基づいて変数に名前を付けることを検討してください。
  • を使用しDataTableて情報を返すことは、エラーが発生しやすい方法です。int?BLLが値(または値の欠如)を示すためにを返さないのはなぜですか?
于 2010-09-16T06:20:18.770 に答える
1

これが、MVCを実装しない場合に私がやりたいことです。そして私はここでウェブを想定しています。

最初にオプション2を実行しますが、ボタンコードでテキストIDを設定する代わりに、テキストボックスの値を設定するプロパティを作成します。

これを行うのは、他の何かがテキストボックスの値を設定すると、コードが重複するためです。名前またはコントロールタイプを変更すると、問題が発生します。

于 2010-09-16T06:06:06.220 に答える
0

あなたの例によると、オプション2が進むべき道です。オプション1は、フォームとそのフォームにデータを表示する方法を認識しており、SRPに違反しています。

于 2010-09-16T05:59:14.460 に答える