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

如果您要自动订阅事件,我认为拥有一个带有事件处理程序签名的方法,它只是委托给一个具有您需要的“真实”签名的方法(在这种情况下,没有参数) .

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

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

然后在PostUpdate. 然后是否将其拆分PostUpdate为两种方法,一种用于处理 UI 交互,一种用于处理 BLL 交互,这取决于您。在这种情况下,我认为这并不重要。

但是,如何构建 UI 逻辑以使其可测试是完全不同的事情。我最近成为 MVVM 模式的粉丝,但我不知道这对您的特定场景有多大的适用性(它实际上是围绕 Silverlight 和 WPF 设计的)。

不过还有其他一些评论:

  • 按照惯例,参数应该是驼峰式大小写,而不是 PascalCased
  • 你真的相信你会从给局部变量加上前缀中受益l_吗?不是很明显他们是本地人吗?就我个人而言,我不喜欢这里显示的大多数变量名——考虑根据变量的含义而不是类型来命名变量。
  • 使用 aDataTable返回信息是一种有点容易出错的做事方式。为什么 BLL 不能返回 anint?来指示值(或缺少值)?
于 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 回答