Tái cấu trúc là tốt, nhưng đôi khi nó không phải là dễ dàng như vậy để làm việc ra làm thế nào để refactor và thực sự cho dù một cái gì đó thực sự có thể được refactored!C# Tái cấu trúc hai phương pháp gần giống hệt nhau
Tôi có một số phương pháp gần như giống hệt nhau - tôi có thể cấu trúc lại chúng nhưng một phần của quá trình tái cấu trúc nằm ngoài logic của tôi.
Dưới đây là hai phương pháp un-refactored:
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;
}
}
Với Refactoring tôi sẽ có được một phương pháp như thế này mà các phương pháp trước đó un-refactored sẽ gọi
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;
}
}
Vì vậy, những gì chúng ta có một hầu phương pháp tái cấu trúc hoàn toàn - với một vấn đề, Làm cách nào tôi có thể biết được form
Tôi muốn khởi tạo biến số frmName
nào?
bạn đang mong đợi gì xảy ra với DockState.Dock *? Liệu phương pháp được cấu trúc lại có phải là DockState.DockRight không? Hoặc nó sẽ thay đổi tùy thuộc vào loại bạn đang sử dụng? – Cubia
@Cubia đã đánh dấu bạn để chỉ ra điều này. Mặc dù tôi nhận thấy sai lầm ngay khi tôi thử nghiệm câu trả lời: P –