C# 基于场景的查询:跳过类的验证而不使用IF条件
假设您有以下类:C# 基于场景的查询:跳过类的验证而不使用IF条件,c#,scenarios,C#,Scenarios,假设您有以下类:Class1,Class2Class1000。 所有类都继承接口IClass。 所有的类都可以使用下面的代码进行验证 Validate(IClass class) { } 如果不使用if条件,我们如何将类200的验证跳过到类300(这些数字可能会变化,因此没有使用数字的逻辑)?我个人会将验证检查移动到模型中 例如 然后,在每节课上: public class Class200 { public bool ShouldValidate() => false; //
Class1
,Class2
<代码>Class1000。
所有类都继承接口IClass
。
所有的类都可以使用下面的代码进行验证
Validate(IClass class)
{
}
如果不使用if条件,我们如何将类200的验证跳过到类300(这些数字可能会变化,因此没有使用数字的逻辑)?我个人会将验证检查移动到模型中 例如 然后,在每节课上:
public class Class200
{
public bool ShouldValidate() => false; // because whatever
}
然后在您的验证中:
public void Validate(IClass class)
{
if(class.ShouldValidate())
{
// do whatever
}
}
这样,逻辑就属于IClass
实例,任何愿意扩展它的人都知道如何实现异常
另外,对于类200-300,您可以从一个公共基类继承它们,该基类总是返回false
以获得一个干式模式
更新另一个选项是将validate直接放入类中,例如:
public interface IClass{
void Validate();
}
然后在类200-300中只保留该方法为空,例如
public class Class200
{
public bool Validate()
{
}
}
并在需要时实施
public class Class1
{
public bool Validate()
{
// do awesome things here
}
}
就我个人而言,我会将您的验证检查移到模型中 例如 然后,在每节课上:
public class Class200
{
public bool ShouldValidate() => false; // because whatever
}
然后在您的验证中:
public void Validate(IClass class)
{
if(class.ShouldValidate())
{
// do whatever
}
}
这样,逻辑就属于IClass
实例,任何愿意扩展它的人都知道如何实现异常
另外,对于类200-300,您可以从一个公共基类继承它们,该基类总是返回false
以获得一个干式模式
更新另一个选项是将validate直接放入类中,例如:
public interface IClass{
void Validate();
}
然后在类200-300中只保留该方法为空,例如
public class Class200
{
public bool Validate()
{
}
}
并在需要时实施
public class Class1
{
public bool Validate()
{
// do awesome things here
}
}
您需要显示哪些代码决定调用
Validate()
以及Validate()
是否可以移动到类本身。您需要显示哪些代码决定调用Validate()
以及Validate()
是否可以移动到类本身。明白您的意思了。但我们能否提出一种方法,在验证方法中不使用条件@Venkatesan这取决于您在验证中执行的其他操作
@Venkatesan检查我的更新,不确定这是否是您的意思。让类自己进行验证对我来说似乎是最好的选择。@Chris这取决于其他逻辑的强度,该类是否用作可序列化的DTO/模型,以及验证可能有多少依赖项。在OPs问题的背景下-当然。不过,我永远不会在我的api模型中使用验证方法——只使用属性。明白你的意思了。但我们能否提出一种方法,在验证方法中不使用条件@Venkatesan这取决于您在验证中执行的其他操作
@Venkatesan检查我的更新,不确定这是否是您的意思。让类自己进行验证对我来说似乎是最好的选择。@Chris这取决于其他逻辑的强度,该类是否用作可序列化的DTO/模型,以及验证可能有多少依赖项。在OPs问题的背景下-当然。不过,我永远不会在我的api模型中使用验证方法——只使用属性。