也谈需求变化的应对

看到很多人太需求变化,我也谈一下,凑个热闹。

 举个例子:

          比如有一个程序要用combox显示一个列表。列表内容是X1、X2、X3。程序中会根据X1,X2,X3判断做一些处理。

参考代码如下:

  

代码

  
int value = comboBox1.SelectedIndex;
            
switch (value)
            {
                
case 0:
                    MessageBox.Show(
"x1");
                    
break;
                
case 1:
                    MessageBox.Show(
"x2");
                    
break;
                
case 2:
                    MessageBox.Show(
"x3");
                    
break;

            }

 

 

用户使用过一段时间后,需要增加列表内容:比如增加X4,X5。那么上述程序就要改成:

 

代码
  int value = comboBox1.SelectedIndex;
            
switch (value)
            {
                
case 0:
                    MessageBox.Show(
"x1");
                    
break;
                
case 1:
                    MessageBox.Show(
"x2");
                    
break;
                
case 2:
                    MessageBox.Show(
"x3");
                    
break;
                
//v2.0 add 支持x4,x5
                case 3:
                    MessageBox.Show(
"x4");
                    
break;
                
case 4:
                    MessageBox.Show(
"x5");
                    
break;
            }

 

维护代码,风格好点的会写点注释。

这样的方式可以一直延续下去,用户不断增加需求,程序员不断修改代码。但是,有没有更好的方案呢?我相信博客园的高手众多,肯定又很多很好的方案。我想的方案是这样的:

  

代码
  public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();

            List
<ObjectHolder> list = new List<ObjectHolder>();
            list.Add(
new ObjectHolder(0,"test1"));
            list.Add(
new ObjectHolder(0,"test1"));
            list.Add(
new ObjectHolder(0,"test1"));

            comboBox1.DataSource 
= list;
        }

        
private void button1_Click(object sender, EventArgs e)
        {
            
//int value = comboBox1.SelectedIndex;
            
//switch (value)
            
//{
            
//    case 0:
            
//        MessageBox.Show("x1");
            
//        break;
            
//    case 1:
            
//        MessageBox.Show("x2");
            
//        break;
            
//    case 2:
            
//        MessageBox.Show("x3");
            
//        break;
            
//    //v2.0 add 支持x4,x5
            
//    case 3:
            
//        MessageBox.Show("x4");
            
//        break;
            
//    case 4:
            
//        MessageBox.Show("x5");
            
//        break;
            
//}
            
// V3.0 重构
            ObjectHolder selectObject = comboBox1.SelectedItem as ObjectHolder;
            selectObject.DoWork();

        }
    }

    
class ObjectHolder
    {
        
public int value;
        
public string caption;

        
public ObjectHolder(int value, string caption)
        {
            
this.value = value;
            
this.caption = caption;
        }

        
public override string ToString()
        {
            
return caption;
        }

        
public void DoWork()
        {
            MessageBox.Show(
this.caption);
        }
    }

 

 

引入对象的方法来解决。将来如果变化仍然频繁,可以考虑把combox列表配置成外部文件,如:XML。Table等等。

 

说了这么多,我觉得就是敏捷里面的一个核心思想,拥抱变化。通过重构来不断进化你的程序架构。这样,始终保持你的程序健壮性。又不至于过度设计。

当然,上面的例子可能有些过于简单,第一个版本就设计成对象的方式也未尝不可。只是,如果复杂的例子,能够经历过这样的演进过程会让程序变化更平稳。

posted @ 2010-05-10 20:48  dcll  阅读(256)  评论(0编辑  收藏  举报