我不太熟悉重构,但我觉得我需要在这段代码中做一些改变…
我有4个按钮在我的应用程序。每一个调用一个方法,从一个在线xml接收数据,并使用这些数据来填充一个列表框。
我一直在重复所有这些方法的代码,尽管有时我看到它们有所不同。
下面是对我的逻辑的一点解释:
按钮btnA_Click和btnB_Click获得相同的数据,但来自不同的年份。
其他2个按钮也是如此。它们得到相同的数据(与btnA不同)和btnB),但也来自不同的年代。
按钮:
private void btnA_Click(object sender, RoutedEventArgs e)
{
string webService = @"xml from the web";
table.OpenReadAsync(new Uri(webService));
btnA.IsEnabled = false;
btnB.IsEnabled = false;
progressBar1.Visibility = System.Windows.Visibility.Visible;
}
private void btnB_Click(object sender, RoutedEventArgs e)
{
string webService = @"xml from the net";
table.OpenReadAsync(new Uri(webService));
btnA.IsEnabled = false;
btnB.IsEnabled = false;
progressBar1.Visibility = System.Windows.Visibility.Visible;
}
private void btnSTA_Click(object sender, RoutedEventArgs e)
{
string webService = @"xml from the web;
stats.OpenReadAsync(new Uri(webService));
btnSTA.IsEnabled = false;
btnSTB.IsEnabled = false;
progressBar3.Visibility = System.Windows.Visibility.Visible;
}
private void btnSTB_Click(object sender, RoutedEventArgs e)
{
string webService = @"xml from the web;
stats.OpenReadAsync(new Uri(webService));
btnSTA.IsEnabled = false;
btnSTB.IsEnabled = false;
progressBar3.Visibility = System.Windows.Visibility.Visible;
}
方法:
void table_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null && !e.Cancelled)
{
XElement xml = XElement.Load(e.Result);
var table = LINQ Statement...
listBox1.ItemsSource = table;
btnClassificacaoSerieA.IsEnabled = true;
btnClassificacaoSerieB.IsEnabled = true;
progressBar1.Visibility = System.Windows.Visibility.Collapsed;
}
}
void stats_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null && !e.Cancelled)
{
XElement xml = XElement.Load(e.Result);
var stats = LINQ Statement...
listBox3.ItemsSource = stats;
btnSTA.IsEnabled = true;
btnSTB.IsEnabled = true;
progressBar3.Visibility = System.Windows.Visibility.Collapsed;
}
}
我有点迷路了。我能做些什么使这段代码更面向对象?
谢谢!
你的点击事件似乎大多是相同的…创建一个做这些事情的sub并从click事件中调用这个sub。看看你是否可以在参数中添加任何不同。
隐藏/显示进度条和启用/禁用按钮的代码也几乎相同。把它放到一个带有参数的子元素中让你知道是隐藏还是显示