以人為本的程序的設計
軟件要越來越人性化,就要代替人干很多事情。軟件干的事情越多,程序設計就越來越復雜。程序越來越復雜,Programer 就有義務使程序盡可能的 Simple。
當然,這個 Simple 并不是簡化需求來使代碼量減少,而是運用智慧,使代碼達到“繁而不亂”的效果。
對,繁而不亂,這是藝術!
為什么要求代碼“繁而不亂”?這要從代碼的使用角度說起。
代碼,說白了,是一種人與計算機交互的語言,它的使用對象有兩個:計算機,和人。
語言的作用是傳遞信息,而語言最根本的原則就是便于理解。
做為計算機語言,特別是現(xiàn)在流行的這些高級計算機語言,能不能被計算機閱讀和理解,強大的開發(fā)工具隨時都會告訴你。而這些語言能不能被活生生的人類理解,這就是人們自己的事兒了。
有些人堅定的認為,代碼寫出來就是給計算機執(zhí)行的,其它問題一概不管。這倒干脆,不過這是非常危險的。因為代碼不只是給計算機運行的,還有一個重要的作用就是給人閱讀的。至少,你寫完代碼需要自己 Debug 一下吧……
其實,自從有了面向?qū)ο笳Z言,實現(xiàn)代碼的繁而不亂已經(jīng)非常的 Easy 了。不光 Easy,而且還顯得是那么的優(yōu)雅。
語言都是相通的,設計者們在設計計算機語言的時候賦予了它太多人類語言的特征。所以,設計一個優(yōu)秀的程序,只需要好好理解我們平時所講的話,直接用計算機語言表達出來,就絕對是非常棒的程序。
怎么把人類語言翻譯成計算機語言?簡單來講,注意以下兩點就行了:
- 所有名詞(代詞),翻譯成屬性
- 所有動詞,翻譯成方法
舉個簡單的例子,拿我們平時最常說的一句話,來翻譯一下:“我看你妹”。簡單的四個字,三個稱謂(代詞),一個動詞。翻譯成計算機語言,就是:
- 我.看(你.妹) I.See(You.Sister)
I 的行為 See,對象是 You 這個對象的 Sister 屬性。我不管 You 的 Sister 屬性是誰,叫什么。當然,如果 You 的 Sister 屬性為空,即你沒有妹妹,那么 See 這個方法就沒法執(zhí)行了,應該直接跳出。(**8.26 9:49添加該段**)
怎么樣?是不是對整個業(yè)務邏輯一目了然?
基于這個思想,現(xiàn)實中的一切都可以使用面向?qū)ο蟮乃枷雭砦溲b。
屬性的設計比較簡單,許多人往往會糾結于程序中的方法的設計,比如代碼過長的大方法,還有邏輯過于復雜的笨方法。下面拿一個稍復雜一點的業(yè)務來實現(xiàn)一下以人為本的方法設計。
比如,今天早上我一覺醒來,睜開眼,開始計劃今天的安排?;谌祟惖淖匀皇姑?,和我個人的社會責任感,今天我可能要干很多事情。首先我要起床、洗漱、吃早點、上班、工作、吃飯、工作、下班、吃飯,可能我還要下班回家的路上去一趟超市買點東西,晚上吃完飯再嗨一會兒(可以打打牌,上上網(wǎng),看看電視),最后睡覺。這樣,今天就結束了。所以,我的大腦里立刻就會出現(xiàn)下面這樣一份“今日計劃”清單:
- 起床
- 洗漱
- 吃飯
- 上班
- 工作
- 吃飯
- 工作
- 下班
- 買東西
- 吃飯
- 休閑
- 睡覺
如果,我把我今天的計劃設計成一個程序,“今日計劃”的執(zhí)行方法里只寫這 12 行代碼,無論誰來看,都能一目了然的知道我今天都要干些什么事情了。至于你起床時是把被子用手掀開還是用腳蹬掉,起床穿衣服時是先穿褲子還是先穿內(nèi)褲,這是你做“今日計劃”的時候不去考慮的問題,也是跟本不用你詳細考慮的問題,也是閱讀你代碼的人不會直接關心的問題,這些都屬于“起床”這個子業(yè)務的任務,或者是“起床”這個業(yè)務的子業(yè)務。比如,我的“起床”方法就這樣設計:
- 伸個懶腰
- 掀開被子
- 坐起來
- 穿衣服
- 坐到床邊上
- 穿鞋子
- 下床
同樣,如果誰想了解我起床的過程,看這幾行代碼,還是一目了然。同樣,穿衣服的過程都設計到“穿衣服”方法里,有條有理。
另外,至于吃完晚飯的休息時間,我可能打牌,可能上網(wǎng),可能看電視,具體的決定,是看到時我具體的心情,所以我做計劃時安排的是一個“休閑”時間,在這個休閑時間里,可以獲取我的心情狀態(tài),根據(jù)不同的狀態(tài),來執(zhí)行不同的休閑方式。
不過,具體的打牌、上網(wǎng)、看電視,它們不是“休閑”方法的邏輯,所以也會單獨的封裝成一個方法來處理。
以這種方式來分的話,整個程序邏輯清楚,結構分明。更重要的是,讓讀者易于理解。根本不會存在難理解的“大方法”和業(yè)務復雜的“笨方法”。
最后,我極力的不贊成使用數(shù)字來限制程序,非常不喜歡有些人拿出一些所謂的“科學”數(shù)字來做為編碼準則。例如:人類同時關注的事情不超過三個,人類同能夠同時處理的信息不超過七個,以及過于濫用的二八原則,還有頁面大小25行等等。人類的腦袋差別太大了,這世界上的特殊情況太多了,以及各個開發(fā)人員顯示器分辯率也差別太大了,所以任何用固定數(shù)字來做為行為準則的,都有些失之偏頗了。真的完全不建議。(除非你是項目經(jīng)理,在制定項目規(guī)范)
注:由于規(guī)定,文章內(nèi)容個別用詞已經(jīng)更改。
原文鏈接:http://www.cnblogs.com/zhhh/archive/2012/08/26/2657088.html