定义方法的好方法

The*_*ing 0 c# methods code-structure

实现方法调用的最佳/最佳方法是什么?

例如:从下面通常被认为是最佳实践.如果两者都不好,那么什么被认为是最佳实践.

选项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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

选项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;
    }
Run Code Online (Sandbox Code Playgroud)

我知道我们可以直接传递参数而无需分配局部变量......我的问题更多的是关于方法定义及其处理方式.

Jon*_*eet 6

如果您自动订阅该事件,我认为使用事件处理程序签名的方法并不特别糟糕,该方法只委托给您需要"真正"签名的方法(在这种情况下,没有参数) .

如果您手动订阅,则可以使用lambda表达式:

postUpdateButton.Click += (sender, args) => PostUpdate();
Run Code Online (Sandbox Code Playgroud)

然后开始工作PostUpdate.然后你是否PostUpdate分成两个方法,一个处理UI交互,一个处理BLL交互取决于你.在这种情况下,我认为这不重要.

如何构建UI逻辑以使其可测试是一个完全不同的问题.我最近成为MVVM模式的粉丝,但我不知道对你的特定场景有多适用(它真的是围绕Silverlight和WPF设计的).

其他几条评论:

  • 通常,参数应该是camelCased,而不是PascalCased
  • 你是否真的相信你能从前缀局部变量中受益l_?他们在当地不是很明显吗?就个人而言,我并不热衷于这里显示的大多数变量名称 - 考虑在其含义之后命名变量而不是它们的类型.
  • 使用a DataTable来返回信息是一种有点容易出错的做事方式.为什么BLL不返回int?指示值(或缺少值)?