如果您将数据(模型)与显示日期的方式(视图)分开,则应该是正确的现代设计。
如果分开,将很容易重用此模型并以不同方式查看它:在表格中?还是文本文件?单元测试会更容易,因为你的模型独立于winforms,而且通常代码更小,所以更容易阅读和更改。
所以您的模型有两个项目:一个完整的输入文本和一个温度。我们还不知道温度是什么类型:一个字符串,或者一个数字?是摄氏度还是开尔文?因为我们将模型与视图分开,所以我们不需要知道这一点。
所以首先你需要一些东西来阅读你的输入文本。
string GetInputText()
{
return this.textBoxInput.Text;
}
目前我们知道此输入文本来自文本框,但同样:在程序之外,我们不想知道您从哪里获取输入文本。如果在将来的版本中您决定从 Internet 获取此文本,则程序的其余部分不必更改。
其次,我们需要一个程序来从您的输入文本中提取温度的字符串表示:
string ExtractTemperatureText(string inputText)
{
....
}
你怎么知道温度在哪里?它是否总是从 inputText 的第 76 个字符开始?或者也许是第 15 行 TBody = 之后的文本?由于您没有指定,我无法编写代码。再说一遍:好消息是,如果您决定更改输入文本的格式,只需更改此过程即可。
好的,所以我们能够获取输入文本(来自任何来源),并将温度提取为文本(无论输入文本具有何种格式)。
decimal ParseTemperature(string temperatureText)
{
return decimal.Parse(temparutureText);
}
如果稍后您决定“C”是温度文本的一部分,并且您还将支持“F”和“K”,则仅在此过程中进行更改。
最后是显示温度的方法:
void DisplayTemperature(decimal temperature)
{
// What format?
this.textBoxTemperature.Text = temperature.ToString("f3");
}
再次重申:如果您以后决定支持 F 和 K,这是唯一必须更改的方法
void ProcessInputTemperature();
{
DisplayTemperature(ParseTemperature(ExtractTemperatureText(GetInputText())));
}
把它们放在一起:
void OnButtonOk_Clicked(object sender, ...)
{
this.ProcessInputTemperature();
}
看,我什至将您的输入按钮与模型分开:如果您希望通过单击、加载表单或其他方式获得它:只需更改一个位置。
此外:所有其他方法都可以进行单元测试,无需表单。