我有一个问题,我提交表格,在提交表格之前,我必须为该表格定义某些标准,这意味着在提交表格时,它会通过标准,如果符合标准则执行行动。
现在它引导我进入很多if / else条件,我想知道如何避免这种情况。我也关注性能问题。有适合的设计模式吗?我该如何存储数据?在这种情况下,哪种数据结构可能有用?
答案 0 :(得分:1)
根据您的说明,您可以拥有验证器集合或chain of responsibility进行验证。
在任何一种情况下,每个验证者类都有责任进行一小部分验证,并且只有在所有验证成功的情况下才执行最终操作。
如果您的验证格式为
if (someFlag)
{
if (form.SomeProperty!= validValue) return false
}
else
{
if (form.SomeOtherProperty!= validValue) return false
}
if (someOtherFlag)
{
if (form.SomeThirdProperty!= validValue) return false
}
else
{
if (form.SomeForthProperty!= validValue) return false
}
所有人都一个接一个地重复,然后我赞成一个简单的验证器集合,然后循环遍历它们,检查每个验证器,一旦失败就返回false,如果一切都成功就行动。
如果他们更深层次地嵌套某些检查只在某些情况下完成,有点像这样:
if (someFlag)
{
if (form.SomeProperty!= validValue)
{
return false
}
if (someDependentFlag)
{
if (form.SomeThirdProperty!= validValue)
{
return false
}
if (someOtherDependentFlag)
{
if (form.YetAnotherField != changedValue) return false
}
}
}
else
{
if (form.SomeProperty2!= validValue)
{
return false
}
if (someOtherDependentFlag)
{
if (form.SomeThirdProperty!= validValue)
{
return false
}
if (someOtherDependentFlag2)
{
if (form.YetAnotherField2 != changedValue) return false
}
}
}
然后我倾向于使用链接方法,因为您可以将每个支票封装为单独的类和链,然后根据需要将其封装在一起,并根据需要进行深度嵌套。
如果大多数检查都很简单,但只要你的验证器都实现了相同的接口,那么你可以采用一种组合方法,只要你的验证器都实现了相同的接口。
从最简单的事情开始,如果需要,可以演变为更复杂。