После небольшого взлома прототипа я получил ряд методов, которые обновляют логические флаги объекта, а затем обновляют интерфейс и выполняют некоторую обработку на основе нового значения. Они почти все одинаковы, но значение, которое они обновляют, отличается.
например - представьте, что у нас есть куча цветных полей для обновления - у меня могут быть некоторые методы, которые выглядят так:
protected void SetBlueBoxVisibility(bool blueBoxVisibility)
{
Project project = LoadProject();
project.ShowBlueBox = blueBoxVisibility
ReDrawSomeThings();
CalcualteSomeStuff();
Project.UpdateBoxStatus();
SaveProject(project);
ShowBlueBoxPanel(blueBoxVisibility);
RaiseStatusUpdated();
}
protected void SetRedBoxVisibility(bool redBoxVisibility)
{
Project project = LoadProject();
project.ShowRedBox = redBoxVisibility
ReDrawSomeThings();
CalcualteSomeStuff();
Project.UpdateBoxStatus();
SaveProject(project);
ShowRedBoxPanel(redBoxVisibility);
RaiseStatusUpdated();
}
Теперь, очевидно - большая часть этого материала повторяется - что является болью, когда я прихожу, чтобы что-то изменить. Особенно, если у меня будет двадцать разных цветов коробок, а не два!
Я думал, что должен быть способ удалить код, который изменяется, и собрать то же самое в более общем методе, но у меня возникли проблемы с тем, как это сделать.
Я слышал о закрытии, но я недостаточно разобрался с ними, чтобы знать, помогут ли они здесь.
Я подумал, что возможно следующее может быть в правильной строке, но я не знаю, как указать универсальному методу, с каким свойством работать - [Project Variable To Update]
protected void SetRedBoxVisibility(bool redBoxVisibility)
{
SetGenericBoxVisibility([Project Variable To Update],redBoxVisibility)
ShowRedBoxPanel(redBoxVisibility);
RaiseStatusUpdated();
}
protected void SetBlueBoxVisibility(bool blueBoxVisibility)
{
SetGenericBoxVisibility([Project Variable To Update],blueBoxVisibility)
ShowBlueBoxPanel(blueBoxVisibility);
RaiseStatusUpdated();
}
protected void SetGenericBoxVisibility([Project Variable To Update], boxVisibility)
{
Project project = LoadProject();
project.**[Project Variable To Update]** = boxVisibility
ReDrawSomeThings();
CalcualteSomeStuff();
Project.UpdateBoxStatus();
SaveProject(project);
}
Любые указатели на то, как обращаться с такими вещами, были бы полезны :)