基于场景的查询:在不使用IF条件的情况下跳过类的验证

时间:2017-11-26 22:55:16

标签: c# scenarios

考虑您有以下课程:Class1Class2 .... Class1000。 所有类都继承接口IClass。 所有类都可以使用以下代码进行验证

Validate(IClass class) 
{

}

如果不使用if条件,我们如何跳过200级到300级的验证(这些数字可以变化,所以没有使用数字的逻辑)?

1 个答案:

答案 0 :(得分:2)

就个人而言,我会将验证检查移到模型中。

E.g。

public interface IClass{

    bool ShouldValidate();
}

然后,在每个班级:

public class Class200
{
  public bool ShouldValidate() => false; // because whatever
}

然后在你的验证中:

public void Validate(IClass class)
{
    if(class.ShouldValidate())
    {
        // do whatever
    }
}

这种逻辑属于IClass实例,任何愿意扩展它的人都知道如何实现异常。

此外,对于类200-300,您可以从始终返回false的公共基类继承它们以具有DRY模式。

更新另一种选择是直接在类中放置验证,例如像这样:

public interface IClass{

    void Validate();
}

然后将方法留在类200-300中为空,例如

public class Class200
{
  public bool Validate()
  {
  }
}

并在需要的地方实施

public class Class1
{
  public bool Validate()
  {
   // do awesome things here
  }
}