clean code筆記二

筆記6丹拯、邊界(引用庫或他人代碼)

優(yōu)雅的使用第三方庫

大多數(shù)人是通過花好幾天閱讀文檔,再決定怎么使用买置,然后編寫速警。最后不免陷入漫長的調試找代碼中的缺陷中灌闺。因為學習第三方庫代碼很難,整合第三方代碼也很難坏瞄。

優(yōu)雅的使用第三方庫,則應該換一種方法甩卓。

優(yōu)雅的方式:編寫學習性測試鸠匀。

找到最基礎的文檔(用來給第一次使用的人看的),開始閱讀文檔逾柿。每讀完幾個的api缀棍,便開始整合完成你想要的某一個功能,寫一個類的一個函數(shù)將其封裝起來机错。

完成你初步羅列出來的功能便可以開始測試爬范,如果不需要深入理解他人的代碼的話,完成所需功能即可弱匪。如果想要開發(fā)超過百行的有關代碼青瀑,還是把最基礎文檔的api全部測試一遍好。

測試:對函數(shù)分別調用萧诫,從中弄懂參數(shù)和返回值的真正意義斥难,并以此弄清當前函數(shù)整合的所有api干了什么。

測試完成后帘饶,便應該只用自己封裝起來的函數(shù)來寫自己旳程序哑诊。當需要調用新的api,如果這個api屬于之前的某個功能及刻,就寫進那個功能對應的函數(shù)镀裤,如果是新的功能,則應該考慮寫新的類缴饭、新的的函數(shù)暑劝。

編寫學習性測試的好處

減少了學習成本,減少了混亂的調試茴扁,比以前的方法更有效铃岔。

當他人的代碼更新了后,api作用可能會改變,這時候可能會產生兼容性問題毁习,造成你的程序大范圍的出錯智嚷,而且不易于定位錯誤,修改代碼的代價巨大纺且。而通過編寫學習性測試盏道,我們只需將之前編寫的函數(shù)重新測試一遍,再把出錯的函數(shù)修改即可载碌。

當我們需要的代碼還未存在的時候猜嘱,我們可以編寫類似于學習測試的代碼,原理仍是通過所需功能來編寫函數(shù)嫁艇,這叫做adapter模式朗伶。我們通過這種模式,將所需功能寫出步咪,因為這樣一切我們程序所需調用的函數(shù)接在我們的掌控之中论皆,而不是他人的改動的代碼。這就類似于一個過渡層猾漫,通過它点晴,我們將不同人編寫的代碼融合。

7悯周、類

類的組織

1粒督、類應該從一組變量列表開始。如果有公共靜態(tài)常量禽翼,應該先出現(xiàn)屠橄。然后是私有靜態(tài)變量,以及私有實體變量捐康。很少會有公共變量(盡量可能公共變量的數(shù)量)仇矾。

2、公共函數(shù)應跟在變量列表之后解总,最后再是私有函數(shù)贮匕。

類應該短小

1、類名應該精確花枫。類的名稱應該描述其全責刻盐。

2、一個類應該只有一個全責劳翰。

3敦锌、內聚。類應該只有少量實體變量佳簸。類中的每個方法都應該操作一個或多個這樣的變量乙墙。高的內聚性颖变,意味著類中的方法和變量互相依賴、互相結合成一個邏輯整體听想。

4腥刹、有時候,隨著對方法的擴充汉买,實體變量的數(shù)量開始上升衔峰,往往這意味著至少有一個類要從大類里面掙扎出來。重構代碼后蛙粘,實體變量就分給幾個不同的類了垫卤。

修進類的技巧

我們知道編寫一個類不是一觸而就的,而是通過了無數(shù)次修進的出牧。而系統(tǒng)的每處修改(添加功能穴肘,改變邏輯方法等)都讓我們冒著系統(tǒng)會出現(xiàn)問題的風險。這時候我們要對類加以修進(組織和重構)舔痕,以降低修改所面臨的風險梢褐。

1、當一個類龐雜巨大需要重構的時候赵讯,將一個類分隔為幾個類,用明確的功能權責來劃分耿眉。

2边翼、當有新特性要添加時,可以寫一個新類鸣剪,如果能達到新類只用了原有類的極少數(shù)(一個或兩個)方法時组底,就是低耦合度。原有類沒有被干擾筐骇,新類也相當簡潔(只服務于某個新特性)债鸡。

8、單元測試

1铛纬、測試應與生產代碼應在同一個時間段內編寫厌均,先寫測試代碼再寫生產代碼。每編玩一個新的功能告唆,就應該寫測試來檢驗功能的是否實現(xiàn)棺弊。每次更改生產代碼,也應修改測試代碼擒悬。

2模她、保持測試代碼的整潔。不要以為只是測試就不寫整潔的代碼懂牧,臟測試等同于沒測試侈净。測試必須隨生產代碼的眼鏡兒修改,測試代碼越臟,就越難修改畜侦,修改生產代碼后元扔,測試就會開始失敗,隨著版本的演進夏伊,團隊維護測試代碼的代價也在上升摇展,而隨著開發(fā)的進行,開發(fā)壓力的一直增大溺忧,最終會導致開發(fā)者扔掉整個測試站組咏连。一旦沒了測試代碼,程序員就失去了確保對代碼的改動能如愿工作的能力鲁森。這時候整個生產代碼開始腐壞祟滴。

編寫單元測試的技巧

每個測試一個斷言。每個測試中的斷言歌溉,要盡可能少垄懂!不能把不同的測試放在一起。

我們通過打造一套包裝這些api的函數(shù)和工具代碼痛垛,這樣就可以更方便的編寫測試草慧,寫出來的測試,也更便于閱讀匙头。我們通過測試那些函數(shù)和工具代碼漫谷,從而測試那些api。

函數(shù)和工具代碼也以功能為構建目標蹂析,不同的功能用不同的函數(shù)舔示。

這種測試的函數(shù)和代碼工具并非當初就設計出來,而是在對那些充滿令人迷惑細節(jié)的測試代碼進行后續(xù)重構時逐漸演進电抚。

測試帶來的好處

單元測試讓你的代碼可擴展惕稻,可維護,可復用蝙叛。沒有測試俺祠,每次修改都可能帶來缺陷。

編寫單元測試的模式

單元測試可以采取構造-操作-檢驗模式寫成一個函數(shù)借帘。也就是將測試拆分為三個環(huán)節(jié)锻煌,第一個環(huán)節(jié)構造測試數(shù)據(jù),第二個環(huán)節(jié)操作測試數(shù)據(jù)的姻蚓,三個環(huán)節(jié)宋梧,檢驗操作是否得到期望的結果。

測試代碼與生產代碼的不同

測試代碼應當簡單精悍足具表達力狰挡。有些事你大概永遠不會在生產環(huán)境中做捂龄,而在測試環(huán)境中做卻完全沒問題释涛。 通常這關乎內存和upu效率的問題(比方要求在多少秒內,內存不應該超過多少多少)倦沧。

這是代碼應該極具閱讀性唇撬。

整潔的測試遵循的規(guī)則

1、快速展融。測試不應該過于緩慢窖认,如果測試過于緩慢,你就會不想頻繁的測試告希,如果你不頻繁運行測試扑浸,就不能盡早發(fā)現(xiàn)問題。代碼將腐化燕偶。

2喝噪、獨立。測試之間應該相互獨立指么,一個功能一個功能的測試酝惧,不會相互依賴。

3伯诬、可重復晚唇。測試應當可在任何反應中重復通過。

4盗似、自足驗證缺亮。測試的結果應該明顯,最好是bool值桥言,不應通過查看日志這種低效率的方法來判斷測試是否通過。應當由程序來判斷葵礼。

5号阿、及時。測試應該及時編寫鸳粉。單元測試扔涧,應該恰好在使其通過的生產代碼之前編寫。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末届谈,一起剝皮案震驚了整個濱河市枯夜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艰山,老刑警劉巖湖雹,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曙搬,居然都是意外死亡摔吏,警方通過查閱死者的電腦和手機鸽嫂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征讲,“玉大人据某,你說我怎么就攤上這事∈浚” “怎么了癣籽?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滤祖。 經常有香客問我筷狼,道長,這世上最難降的妖魔是什么氨距? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任桑逝,我火速辦了婚禮,結果婚禮上俏让,老公的妹妹穿的比我還像新娘楞遏。我一直安慰自己,他們只是感情好首昔,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布寡喝。 她就那樣靜靜地躺著,像睡著了一般勒奇。 火紅的嫁衣襯著肌膚如雪预鬓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天赊颠,我揣著相機與錄音格二,去河邊找鬼。 笑死竣蹦,一個胖子當著我的面吹牛顶猜,可吹牛的內容都是我干的。 我是一名探鬼主播痘括,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼长窄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纲菌?” 一聲冷哼從身側響起挠日,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翰舌,沒想到半個月后嚣潜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡椅贱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年郑原,在試婚紗的時候發(fā)現(xiàn)自己被綠了唉韭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡犯犁,死狀恐怖属愤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情酸役,我是刑警寧澤住诸,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涣澡,受9級特大地震影響贱呐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜入桂,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一奄薇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抗愁,春花似錦馁蒂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撮珠,卻和暖如春沮脖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芯急。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工勺届, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娶耍。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓免姿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伺绽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容