Refaktoryzacja jest dobra, ale czasami nie jest łatwo obliczyć, jak refaktoryzować, a nawet czy coś rzeczywiście może być refaktoryzowane!C# Refaktoryzacja dwiema prawie identycznymi metodami
Mam wiele metod, które są prawie identyczne - mogę je zreorganizować, ale jedna część refaktoryzacji wykracza poza moją logikę.
Oto dwa un-refactored metody:
private void projectToolStripMenuItem_Click(object sender, EventArgs e)
{
if (projectToolStripMenuItem.Checked)
{
projectToolStripMenuItem.Checked = false;
if (!projectForm.IsDisposed) projectForm.Hide();
}
else
{
if (projectForm.IsDisposed)
projectForm = new frmProject();
projectForm.Show(dockPanel, DockState.DockRight);
projectToolStripMenuItem.Checked = true;
}
}
private void logginToolStripMenuItem_Click(object sender, EventArgs e)
{
if (logginToolStripMenuItem.Checked)
{
logginToolStripMenuItem.Checked = false;
if (!outputForm.IsDisposed) outputForm.Hide();
}
else
{
if (outputForm.IsDisposed)
outputForm = new frmOutput();
outputForm.Show(dockPanel, DockState.DockBottom);
logginToolStripMenuItem.Checked = true;
}
}
Z Refaktoryzacja chciałbym uzyskać metodę tak, że wcześniej un-refactored metody nazwałbym
private void refactoredMethod(TooStripMenuItem menuItem, DockContent frmName)
{
if (menuItem.Checked)
{
menuItem.Checked = false;
if (!frmName.IsDisposed) frmName.Hide();
}
else
{
if (frmName.IsDisposed)
frmName= new frmProject(); // Still Problematic
frmName.Show(dockPanel, DockState.DockRight);
menuItem.Checked = true;
}
}
Więc co mamy prawie metoda całkowicie refaktoryzowana - z jednym problemem, Jak mogę określić, który form
chcę utworzyć z zmiennej frmName
?
Czego spodziewa się zdarzyć DockState.Dock *? Czy metodą refaktoryzacji będzie tylko DockState.DockRight? A może powinien się zmienić w zależności od tego, jakiego typu używasz? – Cubia
@Cubia zaznaczyła cię za wskazanie tego. Chociaż zauważyłem błąd, gdy tylko przetestowałem odpowiedź: P –