Исходный код
private void set_mode(bool mod)
{
if(mod==true)
{
label1.Enabled=true;
button1.Enabled=true;
button2.Enabled=true;
button3.Enabled=false;
button4.Enabled=false;
}
else
{
label1.Enabled=false;
button1.Enabled=false;
button2.Enabled=false;
button3.Enabled=true;
button4.Enabled=true;
}
}
Что не так в исходном коде
Недавно я уже рефакторил код похожей структуры, поэтому не буду повторять решение один в один.
Вместо этого хочу обратить внимание на другой недостаток исходного кода: глядя на него совершенно невозможно понять, о чём идёт речь — в чём смысл одного и второго режима, и что это за кнопки такие, на которые он влияет. Другими словами, здесь хромают нейминг и семантика.
В целом же рефакторинг я хочу провести исходя из следующих соображений:
- там, где есть два режима, легко могут возникнуть и третий, и четвёртый,
- отображение элементов интерфейса не обязательно должно быть полностью взаимоисключающим, поэтому стремление что-то склеивать может быть не оптимальным решением,
- элементы интерфейса также могут добавляться, или их логика отображения может меняться.
Вариант рефакторинга исходного кода
enum CodeReviewMode {
Expert,
Novice
}
private void setCodeReviewMode(CodeReviewMode mode) {
switch (mode) {
case CodeReviewMode.Expert:
approveLabel.Enabled = true;
approveButton.Enabled = true;
mergeButton.Enbled = true;
commentButton.Enabled = false;
viewedButton.Enabled = false;
break;
case CodeReviewMode.Novice:
approveLabel.Enabled = false;
approveButton.Enabled = false;
mergeButton.Enbled = false;
commentButton.Enabled = true;
viewedButton.Enabled = true;
break;
}
}