После недолгого взлома прототипа у меня появилось несколько методов, которые обновляют логические флаги на объекте, а затем обновляют интерфейс и выполняют некоторую обработку на основе нового значения. Они в значительной степени одинаковы - но значение, которое они обновляют, отличается
например - представьте, что у нас есть куча цветных блоков для обновления - у меня могут быть некоторые методы, которые выглядят так:
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);
}
Любые указатели относительно того, как обращаться с такими вещами, были бы полезны:)