【问题标题】:Scenario Based Query: Skipping validation for a class without using IF condition基于场景的查询:在不使用 IF 条件的情况下跳过类的验证
【发布时间】:2017-11-26 22:55:16
【问题描述】:

假设您有以下类:Class1Class2 ....Class1000。 所有的类都继承接口IClass。 所有的类都可以使用下面的代码进行验证

Validate(IClass class) 
{

}

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

【问题讨论】:

  • 您需要显示决定调用Validate() 的代码以及是否可以将Validate() 移动到类本身。

标签: c# scenarios


【解决方案1】:

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

例如

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 模式的公共基类继承它们。

更新 另一种选择是将 validate 直接放入类中,例如像这样:

public interface IClass{

    void Validate();
}

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

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

并在需要的地方实施

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

【讨论】:

  • 明白你的意思。但是我们能否提出一种方法,其中 if 条件未在 Validate 方法中使用。 ?
  • @Venkatesan 这取决于您在Validate 中还做了什么。
  • @Venkatesan 检查我的更新,不确定您是否是这个意思。
  • 让班级自己进行验证对我来说似乎是最好的选择。
  • @Chris 这取决于其他逻辑的强度,该类是否用作可序列化的 DTO/模型,以及验证可能具有多少依赖项。在 OPs 问题的背景下 - 当然。不过,我永远不会将验证方法放在我的 api 模型中 - 只有属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2016-07-13
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多