粒度这个词对于设计人员来说也不是什么陌生的词,粒度上通常称为粗粒度和细粒度,而这里讲的粒度控制主要指的是在系统设计的过程中如何根据需求去控制设计的范围。
粒度的把握是软件设计的关键,举例子来说吧,目前软件的市场上充斥着各种各样同功能的软件,从功能来说甚至几乎完全一样的都有很多,但在各自粒度的控制上或者说达到的程度上都是不同的,往往可以看出大型软件公司做出来的东西虽然功能相同,但其在性能、伸缩性以及友好性都大大超过同样功能的小公司做出来的东西,这就象我们在买衣服、买鞋子等等东西的时候,具有几乎同样的功能、同样的样式,但其质量却仅然不同,但萝卜青菜,各有所好,比如买登山鞋,一个不怎么经常去爬山的人用的着买双GTX那样的鞋吗?没必要,这时就会选择买一双同样功能但便宜很多的Upland之类的鞋,这就是很现实的买方。做软件就像是卖方,需要提供的是什么,最重要的就是提供客户需要的东西,那么客户到底需要什么呢,客户当然希望用最少的钱买到最好的东西,但作为卖方市场,当然希望利润越高越好,这就需要减少开发成本,缩短进度,卖方和买方本来就是一对矛盾体,可以说双方为了共同的利益需要寻找到一个平衡点,这就是软件的粒度控制,也许这个名字不怎么好,叫范围控制吧,在进行系统设计时,同样也是如此,你想想客户需要的只是一栋7层的楼,你却给它设计了一栋能承受100层楼的地基,当然,在同样价格的情况下客户是更喜欢,但在时间上客户并一定允许你投入那么多去做,而且这对于卖方来说也是不值得的,在同样满足客户需求的情况下粒度的把握就成了重点,其中有一点很重要,就是要能预知系统将来的变化,客户也许当时告诉你是要盖栋7层的楼,但随着项目进行你发现原来是要盖栋20层的楼,这个时候再推倒完全重建就很惨了,所以作为设计人员除了要有粒度控制方面的能力还需要有预知系统发展的能力。
要做到的是控制在满足需求以及将来变化的范围内的粒度的系统设计是最完美的,觉得这也是大型项目和小型项目的不同之处,有些时候其实两个项目的功能几乎完全一样,但在系统的响应、并发量、扩展的要求上却会有很多的不同,这个时候如果在小型项目中也采用大型项目的设计去做,做到当然不需否认,但在投入上呢,在回报上呢,在时间上呢,这就象要求做一个Blog系统,我想大家会做出千差万别、各种各样的,虽然功能一样。
做技术的往往在很多时候更偏向追求技术的完美、先进等等,但客户并不会关心那么的多,这个时候需要通过控制粒度来决定是否需要采用复杂具有难度的技术,技术的先进必然就带来了技术的难度、风险。
确实,一个能做大项目又能做小项目的系统设计师是最为优秀的,因为它能给出最为适合的系统架构体系设计,在系统设计上做到伸缩自如,这是很难的,极度佩服这样的人。