将分离方法中的事件逻辑添加到触发它的方法中是一种良好的实践吗?

本文关键字:方法 一种 事件 分离 添加 | 更新日期: 2023-09-27 18:04:27

例如,假设我有一个windows窗体,其中有一些数字文本框和一个按钮,当我点击按钮时,我想取所有这些文本的值并对它们进行一些计算。

将:

private void btnSomeResult_Click(object sender, EventArgs e) {
    DoSomeMath();
} 

是一个更好的做法,而不是说:

private void btnSomeResult_Click(object sender, EventArgs e) {
    //Complex math goes here.
} 

还是取决于操作的复杂度?例如,在简单的乘法、除法等运算中可能不需要它

将分离方法中的事件逻辑添加到触发它的方法中是一种良好的实践吗?

private void btnSomeResult_Click(object sender, EventArgs e) {
DoSomeMath();

}

由于以下原因,这种方法更适合

  1. 如果你的UI改变了,比如用另一个按钮替换一个按钮,这个按钮也需要做同样的功能,那么你可以重用已经写好的功能。从本质上讲,你的UI将独立于按钮控件的功能。

  2. 如果你从单元测试开始,你可以很容易地测试方法(DoSomeMath)。

一种更好的方法是从UI元素中获取数据,并将其传递给更具体的类/类型中的方法参数,以确保数据独立于UI控件

   // This function reads the data from UI and call the next method which is more narrow in it's parameter type (like accepting params of type int )
    private void DoSomeMath()
    {
        // no error handling, just for demostration
        string firstNumber = int.Parse(txtBoxFirstNumer.Text);
        string secondNumber = int.Parse(txtBoxSecond.Text);
        DoSomeMath(firstNumber, secondNumber);
    }
    // No relation to UI as it's parameter are independent of UI controls 
    private void DoSomeMath(string firstNumber, string secondNumber)
    {
        return firstNumber + secondNumber;
    } 

接下来,您可以将方法DoSomeMath(string firstNumber, string secondNumber)移动到不同的类/库中,以便它可以在不同的Windows窗体/Web页面/或其他类中重用。

如果要重用或从多个地方调用complex math,我通常会分离代码。(例如,如果你需要从多个不同的按钮点击处理程序调用它)。

如果没有,没有理由不直接把它放到按钮的处理程序中。