• 也谈需求变化的应对


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

     举个例子:

              比如有一个程序要用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等等。

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

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

  • 相关阅读:
    二次剩余
    【2020.9.29 NOIP模拟赛 T3】寻梦(fantasy)
    Graph and Queries
    势函数和鞅的停时定理学习笔记
    毒瘤计数题汇总
    2-SAT
    CF559E Gerald and Path
    [SDOI2019]世界地图
    CF1349D Slime and Biscuits
    AT4928 [AGC033E] Go around a Circle
  • 原文地址:https://www.cnblogs.com/dcll/p/1732049.html
Copyright © 2020-2023  润新知