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