Il refactoring è buono, ma a volte non è così semplice calcolare il refactoring e in effetti se qualcosa può essere effettivamente refactored!C# Ristrutturazione di due metodi quasi identici
Ho un numero di metodi che sono quasi identici - posso refactoring ma una parte del refactoring è oltre la mia logica.
Qui ci sono due metodi non-refactoring:
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;
}
}
Con refactoring vorrei avere un metodo come questo che i metodi in precedenza non-refactoring chiamerebbero
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;
}
}
Quindi quello che abbiamo quasi metodo completamente refactored - con un problema, Come posso sapere quale form
desidero istanziare dalla variabile frmName
?
Cosa si aspetta accada a DockState.Dock *? Il metodo refactored sarà solo DockState.DockRight? O dovrebbe cambiare a seconda del tipo che stai usando? – Cubia
@Cubia ti ha segnalato per averlo indicato. Anche se ho notato l'errore non appena ho testato la risposta: P –