筆記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号阿、及時。測試應該及時編寫鸳粉。單元測試扔涧,應該恰好在使其通過的生產代碼之前編寫。