我在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);
}
}
我正在将变量实例成员用于验证。将变量的范围从方法增加到类只是为了验证是否有意义?
是否还有其他(更好的)方法来实现此功能,其中验证是集中的,并且变量不需要是类成员?
答案 0 :(得分:0)
首先,我不确定为什么你的成员变量是私有的。那是一个错字吗?如果用户无法更改它们,则无需验证它们。
假设您实际上是公开的,您可以考虑将成员变量转换为Properties并在setter中进行验证。然后您可以抛出错误或将其设置为某个默认值。我更喜欢这种方法,因为它确保您的类始终处于有效状态(假设调用代码合理地处理错误...),而不是每次使用它时都必须调用validate()。
如果你想把它们作为参数,你也可以创建一个帮助类:
class FunArguments {
private string waterGun;
public string WaterGun {
get { return waterGun; }
set {
//do some validation check here
waterGun = value;
}
}
// etc..
}
然后你可以通过某种方式传递给Fun。
答案 1 :(得分:0)
根据您的代码验证逻辑已经集中(我希望这是您/某人创建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);
}
}
}