经过多年的摸爬滚打,最近突然幡然醒悟.总结一下自己的感悟,希望对大家有所帮助。
1、关于需求,主要是心态以及思考方向问题。
     在之前的开发过程中,总是希望在前期就把所有的需求都调研并整理出来,而且还希望能确认其不会发生变化。但是往往现实会告诉我们这种想法是多么的不切实际,根本不可能做到。用户无法确认所有需求,我们也会随着对业务的了解不断的开发出新的需求。于是在开发出现问题后我们总是抱怨说需求无法确定,需求总是变化等等。随着经验的不断增加渐渐的我发现与其抱怨需求变化,不如理解其变化,并改变我们的开发方式和过程,从而能更好的应对变化。其实应对变化不也是我们所要做的工作之一吗?
2、传统方法(面向过程)与面向对象
    不管传统方法还是面向对象的方法都是我们解决问题的方法之一,我们应该根据实际情况的不同选择不同的处理问题的方法。
3、处理变化法-帮助大家从传统方法转换到面向对象
    有很多文章都讲了如何通过面向对象的方法分析问题,大多数我觉得都很突兀,不能很好的帮助我从传统方式切换到面向对象(当然也可能是我没有足够的悟性)。于是我通过看书感悟以及自己总结了处理变化法来帮助自己。现在让我从一个例子开始说明方法。
    票据打印,这个问题是我们在项目中常常碰到的一个问题,首先我是面向对象的新手菜鸟,自然会很习惯的用传统的方式来分析问题。票据打印分析如下:
    1、获得打印信息
    2、打印票据
    3、报告打印完毕
    (只是举例说明,所以请不要针对例子做过多的深究)
    分析完毕后我们自然而然的可以根据分析写出一个打印程序来,但是在写的时候我们能发现步骤2是一个非常可能出现变化的地方。能引起他变化的原因会非常多,例如。1、打印机发生变化;2、打印格式变化;3、多种打印方式要求共存。第1、2种情况我们都还可以通过传统方式解决(把打印票据部分用函数独立出来),第3种情况呢?想来都会头疼的。
    这是我们很自然的就可以想到了对象。我们可以通过定义数个打印对象来分别应对不同的情况,而且有一定面向对象基础的我们也能想到通过定义一个抽象类,然后通过继承来实现多个不同的打印对象。
    打印票据对象我们得到了下图:
   
   但是我们在使用打印票据对象的时候还是发现用起来很不舒服,要在主对象中使用多个选择语句来创建不同的打印对象。如果出现的新的需求我们还是要修改主对象,这显然还是不好的。于是我们想打把打印票据对象创建的工作独立出来,用一个新的对象来负责这个工作;主对象只需要告诉这个新的对象自己要什么类型的打印票据对象就可以了。于是我们有了一个新的图:

    到这里关于打印票据部分的变化我们基本处理完毕了,最新的这种方式提高了这个部分应对变化的能力。随着对系统中可能发生变化部分的处理,我们将逐步的走入面向对象的世界中。

    关于变化:直接发现将来的变化是非常困难的,但是找到可能会发生变化的地方是相对容易的。