粒度這個(gè)詞對(duì)于設(shè)計(jì)人員來說也不是什么陌生的詞,粒度上通常稱為粗粒度和細(xì)粒度,而這里講的粒度控制主要指的是在系統(tǒng)設(shè)計(jì)的過程中如何根據(jù)需求去控制設(shè)計(jì)的范圍。
粒度的把握是軟件設(shè)計(jì)的關(guān)鍵,舉例子來說吧,目前軟件的市場(chǎng)上充斥著各種各樣同功能的軟件,從功能來說甚至幾乎完全一樣的都有很多,但在各自粒度的控制上或者說達(dá)到的程度上都是不同的,往往可以看出大型軟件公司做出來的東西雖然功能相同,但其在性能、伸縮性以及友好性都大大超過同樣功能的小公司做出來的東西,這就象我們?cè)谫I衣服、買鞋子等等東西的時(shí)候,具有幾乎同樣的功能、同樣的樣式,但其質(zhì)量卻僅然不同,但蘿卜青菜,各有所好,比如買登山鞋,一個(gè)不怎么經(jīng)常去爬山的人用的著買雙GTX那樣的鞋嗎?沒必要,這時(shí)就會(huì)選擇買一雙同樣功能但便宜很多的Upland之類的鞋,這就是很現(xiàn)實(shí)的買方。做軟件就像是賣方,需要提供的是什么,最重要的就是提供客戶需要的東西,那么客戶到底需要什么呢,客戶當(dāng)然希望用最少的錢買到最好的東西,但作為賣方市場(chǎng),當(dāng)然希望利潤越高越好,這就需要減少開發(fā)成本,縮短進(jìn)度,賣方和買方本來就是一對(duì)矛盾體,可以說雙方為了共同的利益需要尋找到一個(gè)平衡點(diǎn),這就是軟件的粒度控制,也許這個(gè)名字不怎么好,叫范圍控制吧,在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),同樣也是如此,你想想客戶需要的只是一棟7層的樓,你卻給它設(shè)計(jì)了一棟能承受100層樓的地基,當(dāng)然,在同樣價(jià)格的情況下客戶是更喜歡,但在時(shí)間上客戶并一定允許你投入那么多去做,而且這對(duì)于賣方來說也是不值得的,在同樣滿足客戶需求的情況下粒度的把握就成了重點(diǎn),其中有一點(diǎn)很重要,就是要能預(yù)知系統(tǒng)將來的變化,客戶也許當(dāng)時(shí)告訴你是要蓋棟7層的樓,但隨著項(xiàng)目進(jìn)行你發(fā)現(xiàn)原來是要蓋棟20層的樓,這個(gè)時(shí)候再推倒完全重建就很慘了,所以作為設(shè)計(jì)人員除了要有粒度控制方面的能力還需要有預(yù)知系統(tǒng)發(fā)展的能力。
要做到的是控制在滿足需求以及將來變化的范圍內(nèi)的粒度的系統(tǒng)設(shè)計(jì)是最完美的,覺得這也是大型項(xiàng)目和小型項(xiàng)目的不同之處,有些時(shí)候其實(shí)兩個(gè)項(xiàng)目的功能幾乎完全一樣,但在系統(tǒng)的響應(yīng)、并發(fā)量、擴(kuò)展的要求上卻會(huì)有很多的不同,這個(gè)時(shí)候如果在小型項(xiàng)目中也采用大型項(xiàng)目的設(shè)計(jì)去做,做到當(dāng)然不需否認(rèn),但在投入上呢,在回報(bào)上呢,在時(shí)間上呢,這就象要求做一個(gè)Blog系統(tǒng),我想大家會(huì)做出千差萬別、各種各樣的,雖然功能一樣。
做技術(shù)的往往在很多時(shí)候更偏向追求技術(shù)的完美、先進(jìn)等等,但客戶并不會(huì)關(guān)心那么的多,這個(gè)時(shí)候需要通過控制粒度來決定是否需要采用復(fù)雜具有難度的技術(shù),技術(shù)的先進(jìn)必然就帶來了技術(shù)的難度、風(fēng)險(xiǎn)。
確實(shí),一個(gè)能做大項(xiàng)目又能做小項(xiàng)目的系統(tǒng)設(shè)計(jì)師是最為優(yōu)秀的,因?yàn)樗芙o出最為適合的系統(tǒng)架構(gòu)體系設(shè)計(jì),在系統(tǒng)設(shè)計(jì)上做到伸縮自如,這是很難的,極度佩服這樣的人。