2016-04-15 60 views
0

我有我的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

如果你足够勇敢,可以使用[System.ComponentModel.DataAnnotations](https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validator(v = vs.110)。 ASPX)。 [Here](http://stackoverflow.com/q/2109423/6138713)是一个有关数据注释的回答问题。 –

回答

0

根据你的代码验证逻辑已经集中(我希望当你/有人创建了ArgumentValidationHelper类的时候是完整的意图,而且增加一个Validate方法来包装这两个验证,我觉得,除非你需要有其他的东西在里面

我觉得,你知道那些类变量不是必需的,是的他们没有任何意义,因为他们是(A)private(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); 
     } 
    } 
} 
+0

这听起来对我来说很合理。我猜想为了验证而增加从方法到类的变量范围并不是一个好的策略。 – Amber

0

首先,我不确定为什么你的成员变量是私人的。这是一个错字吗?如果用户不能改变它们,那么你不需要验证它们。

假设你实际上是公开的,你可以考虑将成员变量转换成属性并在setter中进行验证。然后,您可以抛出错误或将其设置为某个默认值。我更喜欢这种方法,因为它确保您的类始终处于有效状态(假设调用代码明智地处理错误...),而不必每次使用时都调用validate()。

如果你想留下他们作为参数,你也可以做一个辅助类:

class FunArguments { 
    private string waterGun; 
    public string WaterGun { 
     get { return waterGun; } 
     set { 
      //do some validation check here 
      waterGun = value; 
     } 
    } 
    // etc.. 
} 

然后你就可以传递给乐以某种方式。

+0

我的问题是:将变量的范围从方法增加到仅用于验证的类是否有意义?你正在建议让他们成为实例成员。这是有原因的吗? – Amber

+0

那么这取决于你的变量来自哪里,这是我从你的代码中无法分辨出来的。只是写''不是很清楚。 – smead

相关问题