软件升级过程中,要保留用户的软件配置。软件升级后配置文件的内容可能变化,防止变化的内容造成软件出现异常。
需求更改前:SNMP响应时间配置范围是1到100s,响应询问次数是1到10次。
用户配置: 30s, 5次;
配置文件类更改前:
[Serializable]
class SnmpSettings
{
internal static readonly string DefaultFilePath = Path.Combine(Application.StartupPath, "#SnmpSettings.bin");
private int millisecondsTimeout = 200;
private int retryTime = 5;
public int MillisecondsTimeout
{
get { return millisecondsTimeout; }
set { millisecondsTimeout = value; }
}
public int RetryTime
{
get { return retryTime; }
set { retryTime = value; }
}
}
需求更改后:需求:SNMP响应时间配置范围是1到10s,响应询问次数是1到10次。
用户配置: 30s, 5次 => (30s >10s 超出新需求的配置范围);
原先只在客户端控件上检验用户输入的范围,导致在读取用户配置文件赋值到控件上时,超出了设置范围:
【ArgumentOutOfRangeException: “30000”的值对于“Value”无效。“Value”应介于 'Minimum' 和 'Maximum' 之间。
参数名: Value】
软件出现异常,异常对用户来说都是致命的,即使是一个很小的错误也会被认为是很严重的问题,这是认知层次的问题。
配置文件类更改后:
[Serializable]
class SnmpSettings
{
private const int MillisecondsTimeoutMinValue = 1;
private const int MillisecondsTimeoutMaxValue = 10000;
private const int RetryTimeMinValue = 1;
private const int RetryTimeMaxValue = 10;
internal static readonly string DefaultFilePath = Path.Combine(Application.StartupPath, "#SnmpSettings.bin");
private int millisecondsTimeout = 200;
private int retryTime = 5;
public int MillisecondsTimeout
{
get
{
if (millisecondsTimeout < MillisecondsTimeoutMinValue)
{
millisecondsTimeout = MillisecondsTimeoutMinValue;
}
else if (millisecondsTimeout > MillisecondsTimeoutMaxValue)
{
millisecondsTimeout = MillisecondsTimeoutMaxValue;
}
return millisecondsTimeout;
}
set
{
if (value < MillisecondsTimeoutMinValue)
{
millisecondsTimeout = MillisecondsTimeoutMinValue;
}
else if (value > MillisecondsTimeoutMaxValue)
{
millisecondsTimeout = MillisecondsTimeoutMaxValue;
}
else
{
millisecondsTimeout = value;
}
}
}
public int RetryTime
{
get
{
if (retryTime < RetryTimeMinValue)
{
retryTime = RetryTimeMinValue;
}
else if (retryTime > RetryTimeMaxValue)
{
retryTime = RetryTimeMaxValue;
}
return retryTime;
}
set
{
if (value < RetryTimeMinValue)
{
retryTime = RetryTimeMinValue;
}
else if (value > RetryTimeMaxValue)
{
retryTime = RetryTimeMaxValue;
}
else
{
retryTime = value;
}
}
}
}
在类中进行范围限制,解决前期版本配置文件内容引起异常。