227
大家知道一个组织的目标,在旧社会,我们党组织的目标是推翻三座大山,就是建立一个全新的中国。那么一个个人它的最重要的目标是什么?过上一个好的幸福的生活。
所以我们经常说为了理想的生活,对个体来说,它的目的是过一个理想的生活,而不是建立什么新社会,但是,只有建立一个全新的社会,个体的理想才能达到,所以,这是组织的目标。然后怎么样把一个个人的目标和一个组织的目标有机地统一在一起,我党早期的实践活动就是通过打土豪分田地。
我们说了打打土豪分田地,是达到目标的重要手段,然后对农民来说,过上好日子分田地是它的目的。但是怎么样才能过上好日子?
有土地就能过上好日子,所以说它的目的是过好日子,那怎么才能过上好日子?那就是需要土地,怎么样才能获得土地,那我就要参加我们党拥护我们党去打土豪,所以说啊,打土豪是我这个过程里面的一个手段。
或者然后我获得了土地,那我举这个逻辑自洽的例子是想说明什么问题呢?
228
就是说我希望大家在整个行进的过程中间,千万别忘了目的,别忘记了“抬头看天远比低头拉车”重要得多,手段结果过程要能区分清楚。我们知道这个目的可能是阶段性的,比如说你阶段性的目的,可能就变成了一个更大范围上的一个目的的手段,我们要把它这样统一在一起。
我们的出发点,更大的是首先系统有个愿景,这是我们更大的目标。然后在这里面我们又把它切割成一堆用例,也是我们的目的。一个个的目的,但是就被降了一个级别了,首先是愿景是最高的,然后愿景下面的每个用例它都是有个目的的,但是已经被降了一个级别了。
比如我们党是建立全新的中国,是它最高的目的。这个个人的最高的目的是过一个好的日子,然后下面再往下一步步地将,然后就变成像用例驱动等等之类。我们知道用例驱动是面向目的,在这个里面达到的境界是把一个矛盾的上方目的和手段进行互换,达到一个和谐的统一。
就是你的目的,最好是人家的手段,然后人家的手段,也最好是你的目的。如果你在这个过程中间,达到这样一个动态互相促进的过程,这就达到完美的和谐,因为我们在这个系统的过程中,我们一再给大家说,一个用例对它来说,你要创造一个目的,面向的驱动目的,然后还有参与者的目的,系统它一个有个过程,它通过这个过程达成了它的目的,或者达成它的结果。
229
在开发方法里面我会给大家讲,最主要的就是说用例驱动的开发方法,也就是我们当代的软件工程,它最大的核心特点,是迭代开发,这种迭代开发的特点是目的面向的。而我们的传统的软件工程,它最大的特点是那种结果导向的,它和我要说的不一样,我会在开发方法基础里面讲这些核心内容。
大家都知道写这个用例的时候,这里面的事件流是最核心的,你要怎么把握它的粒度,就是说我为了达成这个目的,我要经历这样一个过程,但是经历的过程中间,你要跟我进行哪些信息的交换,信息的如何交互与流动,就是事件流,所以,每一个动作都被当成一个事件了。
这都是事件流,在用例中我们只写这个系统里面发生了什么事件,不去写这个事件发生的原因和理由,不回答这个问题,这都是我们写用例的很重要的一些把握,需要注意的一些具体的事项。
你在解决一个问题里面,最重要最难解决的问题,就是把握这个问题的粒度,我们知道不管是什么风格,它都是有元素的,那么这个元素它是有不同粒度的,它不同的粒度也跟层级是连在一起,不同的层级上,它的这个事物的粒度是什么样,所以,不同的层级上它都是可以形成风格的,都可以形成层级上的风格,我们这样理解之后,这就可以大大的加深了你对系统的理解。
230
这是我们在用例里面给大家理解,然后我给大家举了这个例子,打土豪分田地,然后你们记得它们手段和目的怎么进行互换的。然后我也在前面给大家讲了系统的行为,因为对我们来说这都是很重要的,我们首先从涉众的角度来看,然后我们定义了系统的行为是怎么动作,每个行为一定要是可以预测的,可以测量的,可以看得见的。
注意,因为我们知道我们是描述它看到的系统的行为,那么对它有什么要求,它可以描述系统怎么主动响应,怎么被动响应,这都是没有问题的,因此,从它的角度去看,一定要是看得见的。这个行为一定对它来说是看得见的,然后是可以测试的,可以预测的。
用例里面最重要的动作,就是一个可执行局部的规约,我们在汇报里面,它出现的最重要的概念是表达式,这个表达式我们就知道,实际上用我们现代话来说就是一个X形就是一个动作。这个X是一个赋值语句,还是一个方法的函数的调用,我们不care,而是代表了这么一个动作,所以说,用例帮我们找到了一种从用户的角度来看待系统的,以及使用系统的一种方式,而不再是把它写成一个需求的列表,通过列表方式理解这个需求一条条的下去,这并不能形成生动的描述过程,所以看起来是死板的,理解起来也不容易理解。