我正在创建一个计算器应用程序,我正在尝试将业务逻辑与UI分离,以提高代码可维护性并允许更好的单元测试。
我创建了一个CalculatorUI类来管理当用户点击应用程序中的各个按钮时会发生什么。
我还创建了一个执行数学运算的Calculator类,并根据用户要求对计算结果进行了一些验证。 CalculatorUI创建Calculator类的实例,并调用Calculator类中的函数来响应用户的点击。我的问题是,在Calculator类中,如何编写清除文本框的代码并显示消息框以使用户知道无效结果?
我是编程新手,根据我的一位同事(高级程序员)的说法,最好将UI与业务逻辑和数据库分开。
我得到的错误表明当前上下文中不存在'txtDisplay'和'resultValue'...另外,我应该如何使用bool变量?
这是我在计算器类中的代码:
class Calculator
{
public double Addition(double value1, double value2)
{
double result = 0;
result = value1 + value2;
return result;
}
public double Subtraction(double value1, double value2)
{
double result = 0;
result = value1 - value2;
return result;
}
public double Multiplication(double value1, double value2)
{
double result = 0;
result = value1 * value2;
return result;
}
public double Division(double value1, double value2)
{
double result = 0;
result = value1 / value2;
return result;
}
public bool CalculationValidation(double result)
{
bool isValid;
bool isFalse;
// determine if the initial result is within the specified range
if ((result < -4000000000) || (result > 4000000000))
{
MessageBox.Show("The result is too large or small to be displayed.");
txtDisplay.text = "0";
resultValue = 0;
return;
}
// round the result if necessary
string test = result.ToString();
if (test.Contains("."))
{
test = (Math.Round(double.Parse(test), 10 - test.Split('.')[0].Count())).ToString();
}
else if (test.Length > 10)
{
test = (Math.Round(double.Parse(test), 10).ToString());
}
txtDisplay.Text = test;
}
}
答案 0 :(得分:0)
您可以在计算器类中引发异常,然后在您的UI中捕获它并执行重置并显示消息。显示消息并将显示设置为0是UI逻辑。在这种情况下,这是一个很好的分离方式。
这样,您的UI依赖于业务逻辑(Calculator类),但Calculator类不了解UI。目标应该是所有依赖关系都应指向您的域对象。
为了分离更复杂的域名,我建议查看Facade,Command和Observer模式。