У меня есть веб-страница, на которой нужно выборочно показывать или скрывать значительное количество элементов управления.Видимость каждого элемента управления определяется на основе того, какое из 3 условий является истинным.
Так, например, с учетом условий A, B и C;
- Control1 должен быть только видимымкогда A и B истинны, а C ложны.
- Control2 должен быть видимым только тогда, когда B и C истинны, а A ложен.
- Control3 должен быть видимым только тогда, когда A и Cистинны, и не имеет значения, что такое B.
- и так далее ...
Если бы каждый элемент управления рассматривал каждое условие, логика элемента управления была бы уродливой, но выполнимой.
If A Then
If B Then
If C Then
Else
End If
Else
If C Then
Else
End If
End If
Else
If B Then
If C Then
Else
End If
Else
If C Then
Else
End If
End If
End If
Но, к сожалению, когда вы смешиваете тот факт, что многие элементы управления заботятся только об 1 или 2 из 3 условий, код начинает превращаться в кошмар обслуживания.Вот все 26 возможных условий:
A False B Any C Any
A True B Any C Any
A Any B Any C False
A False B Any C False
A True B Any C False
A Any B Any C True
A False B Any C True
A True B Any C True
A Any B False C Any
A False B False C Any
A True B False C Any
A Any B False C False
A False B False C False
A True B False C False
A Any B False C True
A False B False C True
A True B False C True
A Any B True C Any
A False B True C Any
A True B True C Any
A Any B True C False
A False B True C False
A True B True C False
A Any B True C True
A False B True C True
A True B True C True
Есть ли лучший шаблон для проверки нескольких условий?
Редактировать: Я начал спускатьсяДорога, которую предложил Марсело Кантос, но мои условия A, B и C довольно длинные.Итак, я сделал вспомогательную функцию:
Dim isMatch = Function(A As Boolean?, B As Boolean?, C As Boolean?) As Boolean
Return (Not A.HasValue OrElse A.Value = SomeLongConditionA) _
AndAlso (Not B.HasValue OrElse B.Value = SomeLongConditionB) _
AndAlso (Not C.HasValue OrElse C.Value = SomeLongConditionC)
End Function
Control1.Visible = isMatch(True, True, False)
Control2.Visible = isMatch(False, True, True)
Control3.Visible = isMatch(True, Nothing, True)