我对重构不是很熟悉,但我觉得我需要在这段代码中做一些修改......
我的应用程序中有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;
}
}
我有点迷失在这里。我该怎么做才能使这个代码更加面向对象?
THX!
答案 0 :(得分:0)
您的点击事件似乎大致相同...创建一个执行该操作的子服务并从click事件中调用sub。看看你是否可以在参数上加以区别。
此外,隐藏/显示进度条和启用/禁用按钮的代码几乎相同。那些带有参数的东西,可以让你说出你想要隐藏还是显示。