У меня есть условная логика, которая требует предварительной обработки, которая является общей для каждого из условий (создание объектов, поиск в базе данных и т. Д.).Я могу придумать 3 возможных способа сделать это, но у каждого есть недостаток:
Опция 1
if A
prepare processing
do A logic
else if B
prepare processing
do B logic
else if C
prepare processing
do C logic
// else do nothing
end
Недостаток варианта 1 заключается в том, что дорогой кодявляется избыточным.
Опция 2
prepare processing // not necessary unless A, B, or C
if A
do A logic
else if B
do B logic
else if C
do C logic
// else do nothing
end
Недостаток варианта 2 состоит в том, что дорогой код выполняется даже тогда, когда ни A, B или C не являются истинными
Опция 3
if (A, B, or C)
prepare processing
end
if A
do A logic
else if B
do B logic
else if C
do C logic
end
Недостаток варианта 3 заключается в том, что условия для A, B, C оцениваются дважды.Оценка также является дорогостоящей.
Теперь, когда я об этом думаю, существует вариант варианта 3, который я называю вариантом 4:
Вариант 4
if (A, B, or C)
prepare processing
if A
set D
else if B
set E
else if C
set F
end
end
if D
do A logic
else if E
do B logic
else if F
do C logic
end
Хотя это относится к дорогостоящим оценкам A, B и C, это делает все это более уродливым, и мне это не нравится.
Как бы вы оценили варианты, и есть ли другие, которых я не вижу?