目的:防止設(shè)計(jì)中出現(xiàn)復(fù)雜的解決方案。
適用情形:適用于任何項(xiàng)目,所有大型的或復(fù)雜的系統(tǒng)和項(xiàng)目都應(yīng)該采用該原則。
應(yīng)用方式:讓同同行來檢查解決方案是否好理解,抵制過度設(shè)計(jì)的強(qiáng)烈欲望。
應(yīng)用理由:復(fù)雜的解決方案實(shí)施成本高,而且會產(chǎn)生大量長期成本。要點(diǎn):過度復(fù)雜的系統(tǒng)會限制擴(kuò)展能力。簡單的系統(tǒng)更容易維護(hù)和擴(kuò)展,且成本更低。
維基百科解釋說,過度設(shè)計(jì)分為兩大類。一類是指設(shè)計(jì)與實(shí)現(xiàn)超出了有用需求的產(chǎn)品。出于完整性的考慮,我們只簡單地討論一下這個問題。相對于第二類問題來說,這類問題對可擴(kuò)展性的影響較小。過度設(shè)計(jì)的另一類問題指過于復(fù)雜的產(chǎn)品。如前所述,我們最關(guān)心的是第二類問題對可擴(kuò)展性的影響。不過,還是先來了解一下第一個問題吧。
要解釋過度設(shè)計(jì)的第一類問題,即超出產(chǎn)品有用需求的問題,就要先搞清楚楚“有用的”這個術(shù)語的含義,這個術(shù)語在這里表示的只是“能夠伸用”。例如。為家庭住房設(shè)計(jì)一種空調(diào),能夠在室外溫度為0開時把整個房子的溫度加熱到300華氏度,這毫無意義,純屬浪費(fèi),我們只需要一個能夠在室外溫度為-20華氏度時把房子加熱到舒適溫度的產(chǎn)品。這種過度設(shè)計(jì)會產(chǎn)生過度的成本,其中開發(fā)的成本會更高,實(shí)施該方案的硬件和軟件成本也會更高。如果研發(fā)這種過度設(shè)計(jì)系統(tǒng)的時間比研發(fā)有用系統(tǒng)的時間更長,還可能拖延產(chǎn)品的發(fā)布,對公司造成進(jìn)一步的影響。成本高,利潤就低。研發(fā)時間長,收入或收益就會被延遲,所有這些成本都會影響到利益相關(guān)者。范圍蔓延,或者最初的產(chǎn)品定義和最初的產(chǎn)品發(fā)布之間的范圍差異,是過度設(shè)計(jì)的一種表現(xiàn)。
說個更接近我們工作的例子,是開發(fā)一個員工打卡系統(tǒng),這個系統(tǒng)能夠處理的員工數(shù)量是整個地球上人數(shù)的100倍。在這個軟件的使用期限內(nèi),地球上的人口升至100倍的可能性是微乎其微的,而所有人都為一家公司工作的可能性則更小。我們當(dāng)然想讓構(gòu)建的系統(tǒng)滿足客戶需求但也不想浪費(fèi)時間來實(shí)現(xiàn)和部署遠(yuǎn)遠(yuǎn)超出需求的系統(tǒng)。
過度設(shè)計(jì)的第二類表現(xiàn)是使系統(tǒng)過度復(fù)雜,或者用復(fù)雜的方式來實(shí)現(xiàn)它。簡而言之,就是要花費(fèi)過大的力氣去完成一項(xiàng)工作,或者是讓用戶花費(fèi)過大的力氣去完成一項(xiàng)任務(wù),或者是讓程序員花費(fèi)過大的力氣去理解一個功能。讓我們來逐一分析過度復(fù)雜的系統(tǒng)的這三種情況。
什么是花費(fèi)過大的力氣去完成一項(xiàng)工作呢?現(xiàn)實(shí)世界有最簡單的例子。假設(shè)你讓某人去雜貨店買東西,你告訴他,店里面的所有商品都拿一個,排隊(duì)結(jié)賬時給你打電話。等他打電話給你時,你再告訴他到底想要哪幾個,讓他從所拿的無數(shù)籃商品中選出來,然后把其他商品都倒在地上。你一定會說:“別開玩笑了。”可是,你在自己的代碼中用過select(大)schema_nane.tab1e_name這樣的SQL語句,只是為了從返回的集合中找出自己想要的結(jié)果嗎?我們這個雜貨店的例子,和上述的se1ect(*)正是異曲同工。在你的代碼中,有幾個條件語句是處理個別情況的,它們是按照什么順序執(zhí)行的?是不是最可能發(fā)生的情況最先執(zhí)行?你是不是經(jīng)常剛查詢完一個結(jié)果,又重復(fù)查詢一次?是不是經(jīng)常剛顯示了HML面,這種情況隨處可見,卻又經(jīng)常被忽視。
什么是讓一位用戶花費(fèi)過大的力氣去完成一項(xiàng)任務(wù)呢?答案非常簡單。在許多情況下,少就是多。為追求系統(tǒng)的靈活性,我們總是想給它硬加上盡可能多的奇怪功能。但生活的情趣并不總在于多種多樣。許多時候,用戶只是想無干擾地盡可能快地從A到達(dá)B。如果你的市場中有99%的用戶不需要把日志文件存成pdf文件,那么就不要構(gòu)建一個提示框詢問他們是否想把日志文件保存成pdf文件。如果你的用戶想把.wav文件轉(zhuǎn)換成MP3文件,那么他們已經(jīng)不在乎損失精度了,所以不必再提示他們轉(zhuǎn)換成無損壓縮的FLAC文件,那樣只會干擾他們。
最后一種情況,就是軟件復(fù)雜得讓其他程序員難以理解。創(chuàng)建復(fù)雜的代碼讓他人難以理解曾經(jīng)非常流行(還有過比賽)。有時,代碼寫得復(fù)雜,是為了讓它比一般程序員所開發(fā)的代碼運(yùn)行更快。而更多的情況是代碼的復(fù)雜度(就其理解的難度而言)成了程序員才華的象征,或者說是功夫高低的象征。那些開發(fā)的代碼能讓做代碼檢查的高級開發(fā)人員欲苦無淚的人反而頗受推崇。復(fù)雜度成了智慧的牢籠,編程極客們會在公司內(nèi)部爭強(qiáng)好勝。對于樂此不疲的人來說,這是很好的比賽,但對于公司和股東來說,則要為一場無人關(guān)心的牢籠大賽買單。對于那些仍然沉浸于這場極客盛宴的人,如果不想損害利益相關(guān)者的利益,又想真刀真槍地拼一場,那建議你參加國際混淆C代碼競賽。
我們都應(yīng)該努力去寫讓每個人都能理解的代碼。衡量一個偉大程序員的真正標(biāo)準(zhǔn),是他能夠多快把一個復(fù)雜的問題簡化,多快能開發(fā)出一個既容易理解,又容易維護(hù)的解決方案。容易執(zhí)行的解決方案意味著一般程序員就可以快速地掌握系統(tǒng),為它提供支持。容易理解的解決方案則意味著在查找問題時能夠甲
方式把系統(tǒng)恢復(fù)到正常工作狀態(tài)。容易執(zhí)行的解決方案可以提高公司和解決方案的可擴(kuò)展性。
要測試系統(tǒng)是否太復(fù)雜,一個很好的方法是讓負(fù)責(zé)解決復(fù)雜問題的程序員把他的解決方案陳述給公司內(nèi)的一組程序員。這組程序員應(yīng)該代表公司內(nèi)不同的編碼水平,不同的工作年限(加入這一條,是因?yàn)榭赡苡行┯薪?jīng)驗(yàn)的程序員在公司的工作經(jīng)驗(yàn)不多)。要通過這一測試,需要這組程序員中的每一位都能夠輕松理解該解決方案,能夠在無幫助的情況下向他人描述它,而不只是知道它。如果這組程序員中的任何一位不能理解該解決方案,那么就要小組討論該系統(tǒng)是不是過度復(fù)雜了。
過度的
網(wǎng)站設(shè)計(jì)是可擴(kuò)展性的一個敵人。開發(fā)一個超出有用需求的解決方案,既浪費(fèi)金錢又浪費(fèi)時間。此外,還可能進(jìn)一步步浪費(fèi)處理資源,增加擴(kuò)展成本,限制系統(tǒng)的整體擴(kuò)展能力(即系統(tǒng)能被擴(kuò)展到什么程度)。構(gòu)建過度復(fù)雜的解決方案會造成類似的后果。運(yùn)行吃力的系統(tǒng)會增加成本,限制最終發(fā)展規(guī)模。讓用戶用起來吃力的系統(tǒng),會放慢吸引客戶的速度,從而限制業(yè)務(wù)增長的速度。太復(fù)雜以至于難以理解的系統(tǒng),則會扼制司的生產(chǎn)力,讓你無從增加程序員,或者難以給系統(tǒng)增加功能。
網(wǎng)站名稱:不要過度設(shè)計(jì)你的網(wǎng)站
本文來源:http://jinyejixie.com/news27/145627.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、微信小程序、網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)站導(dǎo)航、用戶體驗(yàn)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)