軟件定制價(jià)格由人工成本和時(shí)間成本決定,還需要有簡(jiǎn)化問(wèn)題的能力。簡(jiǎn)化問(wèn)題的含義,不是指動(dòng)用最少的腦筋來(lái)思考問(wèn)題(用ID來(lái)降低耦合?),而是指把看似復(fù)雜的問(wèn)題簡(jiǎn)單化。
在任何一次決策中,都要首先用最簡(jiǎn)單的原則來(lái)尋找最簡(jiǎn)單有效的方案,例如,可移植性原則。要保證可移植性,最簡(jiǎn)單有效的方案是,讓系統(tǒng)的業(yè)務(wù)邏輯與一切平臺(tái)以及第三方工具和框架無(wú)關(guān)。選擇的平臺(tái)和框架都要基于這個(gè)標(biāo)準(zhǔn)。如果不能基于這個(gè)標(biāo)準(zhǔn),就必須設(shè)計(jì)一套獨(dú)立的接口,斷絕業(yè)務(wù)邏輯與外部一切不必要的依賴關(guān)系。場(chǎng)景故事點(diǎn)評(píng):林峰對(duì)成實(shí)說(shuō),他想做一個(gè)框架。聽(tīng)上去,林峰設(shè)想的框架有點(diǎn)復(fù)雜。在現(xiàn)實(shí)中,這種現(xiàn)象非常普遍,很多技術(shù)人員都希望從駕馭復(fù)雜事物中得到樂(lè)趣。
可是,林峰的這個(gè)想法沒(méi)有得到孔如之的支持。孔如之對(duì)林峰這次創(chuàng)新的反對(duì)是一次有效的決策。他說(shuō),他只要最簡(jiǎn)單的方案,只用最成熟的技術(shù)。簡(jiǎn)化設(shè)計(jì)思想,這是一種成熟的做法——不是所有的創(chuàng)新都有意義。再例如,性能原則。數(shù)據(jù)庫(kù)訪問(wèn)是降低性能的一個(gè)重要原因,軟件定制價(jià)格我們要保證在一個(gè)事務(wù)中的數(shù)據(jù)庫(kù)訪問(wèn)次數(shù)最少。對(duì)于多次使用的對(duì)象,我們要使用緩存機(jī)制;對(duì)于一次性使用的對(duì)象,我們要用完即釋放內(nèi)存;我們要盡量減少使用大對(duì)象;我們要盡量避免不要的資源鎖,讓CPU盡情馳騁??傊?,你可以基于性能原則,不斷補(bǔ)充新的經(jīng)驗(yàn)。
在軟件決策中,一個(gè)常見(jiàn)的錯(cuò)誤是團(tuán)隊(duì)決策。Len Bass等在Software Architecture in Practice一書(shū)中明確指出,構(gòu)架的設(shè)計(jì)應(yīng)該由一位設(shè)計(jì)師來(lái)完成,或者由一個(gè)在某位設(shè)計(jì)師領(lǐng)導(dǎo)下的小組來(lái)完成設(shè)計(jì)。我贊成Len Bass的觀點(diǎn)。這個(gè)觀點(diǎn)與敏捷思想是有一定差異的。敏捷方法提倡團(tuán)隊(duì)決策,不過(guò),敏捷方法中的團(tuán)隊(duì)決策其實(shí)是有先決條件的。Robert C.Martin在Agile Software Development:Principles,Patterns,and Practices一書(shū)中說(shuō),敏捷團(tuán)隊(duì)是自組織的團(tuán)隊(duì)。如果你的團(tuán)隊(duì)是自組織的,嘗試團(tuán)隊(duì)決策不是一個(gè)錯(cuò)誤。軟件定制價(jià)格多少另一個(gè)原因是,企業(yè)經(jīng)營(yíng)者們普遍對(duì)個(gè)人決策心存疑慮。這不難理解,在軟件開(kāi)發(fā)實(shí)踐中,有著成功故事的設(shè)計(jì)師是很少的。這不是因?yàn)槿鄙倬邆溥@種能力的設(shè)計(jì)師,而是沒(méi)有這些設(shè)計(jì)師發(fā)揮才能的舞臺(tái)和機(jī)會(huì)。
在辦公軟件開(kāi)發(fā)注意事項(xiàng)的前一個(gè)環(huán)節(jié)中,我已經(jīng)為如何搭建這種舞臺(tái)指出了方向。作為企業(yè)經(jīng)營(yíng)者,如果你對(duì)公司生產(chǎn)的軟件不滿意,如果你對(duì)軟件開(kāi)發(fā)的模式感到迷惘,為什么不愿意嘗試改變呢? 相比于團(tuán)隊(duì)決策,我更傾向于個(gè)人決策。實(shí)際上,個(gè)人決策并不排斥沖突。沖突是創(chuàng)造力的源泉,也是發(fā)現(xiàn)設(shè)計(jì)問(wèn)題的最佳方法。