将单独方法中的事件逻辑添加到触发事件的方法中是一种好做法吗?
Is adding the logic for a event in a separated method to the one that triggers it a good practice?
例如,假设我有一个 windows 表单,其中包含一些数字文本框和一个按钮,当我单击按钮时,我想获取所有这些文本的值并使用他们。
会这样吗:
private void btnSomeResult_Click(object sender, EventArgs e) {
DoSomeMath();
}
比说更好的做法:
private void btnSomeResult_Click(object sender, EventArgs e) {
//Complex math goes here.
}
还是取决于操作的复杂程度?例如,在简单的乘法、除法等中可能不需要它。
如果要重复使用或从多个地方调用,我通常会将您的 complex math
的代码分开。 (例如,如果您需要从多个不同的按钮单击处理程序调用它)。
如果不是,没有理由不将它直接放入按钮的处理程序中。
private void btnSomeResult_Click(object sender, EventArgs e) {
DoSomeMath();
}
由于以下原因,这种方法更适合
如果您的 UI 发生变化,例如将一个按钮替换为另一个也需要执行相同功能的按钮,那么您可以重用已经编写的功能。本质上,您的 UI 将独立于按钮控件的功能。
如果您从单元测试开始,您可以轻松地测试方法 (DoSomeMath)。
更好的方法是从 UI 元素中获取数据并将其传递给更具体的方法参数 class/Type 以确保数据独立于 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)
移动到不同的 Class/Library 以便它可以在不同的 Windows Forms/Web 页面/或其他 类.
例如,假设我有一个 windows 表单,其中包含一些数字文本框和一个按钮,当我单击按钮时,我想获取所有这些文本的值并使用他们。
会这样吗:
private void btnSomeResult_Click(object sender, EventArgs e) {
DoSomeMath();
}
比说更好的做法:
private void btnSomeResult_Click(object sender, EventArgs e) {
//Complex math goes here.
}
还是取决于操作的复杂程度?例如,在简单的乘法、除法等中可能不需要它。
如果要重复使用或从多个地方调用,我通常会将您的 complex math
的代码分开。 (例如,如果您需要从多个不同的按钮单击处理程序调用它)。
如果不是,没有理由不将它直接放入按钮的处理程序中。
private void btnSomeResult_Click(object sender, EventArgs e) {
DoSomeMath();
}
由于以下原因,这种方法更适合
如果您的 UI 发生变化,例如将一个按钮替换为另一个也需要执行相同功能的按钮,那么您可以重用已经编写的功能。本质上,您的 UI 将独立于按钮控件的功能。
如果您从单元测试开始,您可以轻松地测试方法 (DoSomeMath)。
更好的方法是从 UI 元素中获取数据并将其传递给更具体的方法参数 class/Type 以确保数据独立于 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)
移动到不同的 Class/Library 以便它可以在不同的 Windows Forms/Web 页面/或其他 类.