是否应组合不同代码块的验证
本文关键字:验证 代码 组合 是否 | 更新日期: 2024-09-16 23:01:56
我的C#类中有一个函数:
class Fun {
private string waterGun;
private string jacket;
void HaveSomeFun(bool summers) {
waterGun = <Some Value>
jacket = <Some Other Value>
validate();
if(summers) {
Console.WriteLine("Using {0}", waterGun);
} else {
Console.WriteLine("Using {0}", jacket);
}
}
private void validate() {
ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", this.waterGun);
ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", this.jacket);
}
}
我使变量实例成员只是为了验证。将变量的范围从一个方法增加到一个类只是为了验证有意义吗?
如果验证是集中的,并且变量不需要是类成员,那么有没有其他(更好的)方法可以实现这一功能?
根据您的代码验证逻辑已经是集中的(我希望这是您/某人创建ArgumentValidationHelper
类时的全部意图。此外,我觉得添加Validate
方法来包装这两个验证是不必要的,除非您需要在其中添加额外的东西。
我觉得,你知道这些类变量不是必需的,是的,它们没有任何意义,因为它们是(A)私有的(B),不会通过调用代码来设置。
所以我的代码版本是:
class Fun {
void HaveSomeFun(bool summers) {
string waterGun = <Some Value>
string jacket = <Some Other Value>
ArgumentValidationHelper.ValidateNotNullOrEmpty("WaterGun", waterGun);
ArgumentValidationHelper.ValidateNotNullOrEmpty("Jacket", jacket);
if(summers) {
Console.WriteLine("Using {0}", waterGun);
}
else {
Console.WriteLine("Using {0}", jacket);
}
}
}
首先,我不确定为什么您的成员变量是私有的。这是打字错误吗?如果用户不能更改它们,那么您就不需要验证它们。
假设您的意思是公共的,您可以考虑将成员变量转换为Properties,并在setter中进行验证。然后,您可以抛出错误或将其设置为某个默认值。我更喜欢这种方法,因为它可以确保类始终处于有效状态(假设调用代码明智地处理错误…),而不是每次使用它都必须调用validate()
如果你想把它们作为参数,你也可以制作一个助手类:
class FunArguments {
private string waterGun;
public string WaterGun {
get { return waterGun; }
set {
//do some validation check here
waterGun = value;
}
}
// etc..
}
然后您可以通过某种方式将其传递给Fun。