




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
通常情況下,只要這些代碼其中有一點邏輯要修改,就意味著所有粘貼的方都我們看一下下面的幾段代代代publicvoidsendBook()try}catch(Throwablet)this.notification.send(newthrow 9}catch(Throwablet)this.notification.send(newthrow 95}catch(Throwablet)6this.notification.send(new7throw89}這三段函數(shù)業(yè)務的背景是:一個系統(tǒng)要把作品的相關給翻譯引擎。所以,結合著代碼,我們就不難理解它們的含義,sBooksendChaptr把章節(jié)發(fā)送出去,而starttn則是啟動翻譯。這幾個業(yè)務都是以的方式在執(zhí)行,所以,它們的函數(shù)簽名上增加了一個sk的Annotatin它任務的然后際的執(zhí)行了對業(yè)務法上,也就是sere里面的方法。的,請把注意力放到catch語句里。之所以要做一次捕獲(htation.send調用業(yè)務函數(shù)如果出錯,發(fā)通11privatevoidexecuteTask(finalRunnable代2{try34}catch(Throwable5{this.notification.send(new6throw78}有了這個結構,前面幾個函數(shù)就可以用它來改寫了。對于支持函數(shù)式編程的程序設計語言來說,可以用語言提供的便利寫法簡化代碼的編寫,像下面的代碼就是用了JaaMethodRefrenc代代publicvoidsendBook()4代publicvoidsendChapter()4代publicvoidstartTranslation()4日志信息,這樣的改動就可以放到executeTask這個函數(shù)里,而不用四處去改寫了。這個例子并不復雜,關鍵點在于,能不能發(fā)現(xiàn)結構上的重復。因為相比于直接的代但須認識到一點,動詞也扮演著重要的角色,尤其是在函數(shù)式程興理解到這一點,我們就容易發(fā)現(xiàn)結構上的相似之處。比如在上面的例子中,發(fā)送作品信我們再來看一段代碼代代if(user.isEditor())service.editChapter(chapterId,title,content,}elseservice.editChapter(chapterId,title,content,5這是一段對章節(jié)內容進行編輯的代碼。這里有一個業(yè)務邏輯,章節(jié)只有在審核通過之后,才能去做后續(xù)的處理,比如,章節(jié)的翻譯。所以,這里的tr問題來了,這個if選擇的到底是什么呢相信你和我一樣,第一眼看到這段代碼的感覺一定是,f選擇的一定是兩段不同的業(yè)務處理。但只要你稍微看一下,就會發(fā)現(xiàn),f和ee只不過,這種重復代碼通常情況下是作者自己寫出來的,而不是粘貼出來的。因為作者在寫這段代碼時,腦子只想到if語句判斷之后要做什么,而沒有想到這個if但這段代碼客觀上也造就了重復。寫代碼要有表達性。把意圖準確地表達出來,是寫代碼過程中非常重要的一環(huán)。顯然,這f代代booleanapproved=service.editChapter(chapterId,title,content,請注意,這里我把sditor()approvedtrhapter最后一個參數(shù)表示的是這個章節(jié)是否審核通過。通過引入approved變量,種寫讓代碼更清晰。如果將來審核通過的條件改變了,變化的點全都在approved代代1234567booleanapproved=service.editChapter(chapterId,title,content,privatebooleanisApproved(finalUser{return}為了說明問題,我特意選擇了一段簡單的代碼,if語句的代碼塊里只有一個語句。在實際的工作中,if語句沒有有效地去選擇目標是經(jīng)常出現(xiàn)的,有的是參數(shù)列表比較長,有的是在if的代碼塊里有多個語句。所以,只要你看到if語句出現(xiàn),而且if和else的代碼塊長得又比較像,多半就是出現(xiàn)了重復是一個泥潭,對于程序員來說,時刻提醒自己不要重復是至關重要的。在軟件開發(fā)里,有一個重要的原則叫做Don'tRepeatYourself(不要重復自己,簡稱DRY),我在《軟件設計之美》中也講到過它,而更經(jīng)典的敘述在《程序員之道》中在一個系統(tǒng)中,每一處知識都必須有單一、明確、地表述Everypieceofknowledgemusthaveasingle,unambiguous,authoritativerepresentationwithinasystem.寫代碼要想做到DY,一個關鍵點是能夠發(fā)現(xiàn)重復地發(fā)現(xiàn),還有一種是提升自己識別能力,主動地發(fā)現(xiàn)重復。這種主動識別的能力,其實背后要有對軟件設計更好的理解,尤其是對分離關注點的理解(如果你對“分離關注點”的知識感,可以參考我在《軟件設計之美》中的02講)這一講我們講到重復代碼,講到了幾個典型的壞味結構重復的代碼if和else代碼塊中的語句高度類似ifelse代碼塊中的語句高度類似,通常是程序員不經(jīng)意造成的,但這也是對于寫代碼沒有高標準要求的結果。讓if語句做真正的選擇,是提高代碼表達準確性的重要一步。作為一個精進中的程序員,要把DRY原則記在心中,時時刻刻保持對“重復”的如果今天的內容你只能記住一件事,那請記住:不要重復自己,不要粘貼參考資分離關注點:軟件設計至關重要的第一簡單設計:難道一開始就要把設計做復雜 科技所有 不 售賣。頁面已增加防盜追蹤,將依 上一 02|亂用英語:站人的視角來看英文命下一 04|長函數(shù):為什么你總是不可避免地寫出長函數(shù)言精選留言言實現(xiàn)無法快速找到已有實現(xiàn),或者找到了但是不好已有實現(xiàn)。改進:初期設計代碼邏輯合理,對于不合理的地方要及時重構防止演變成原因2展3對于自己寫的代碼,重復寫了多遍的,或者邏輯相似但是又不好直接的地方,發(fā)現(xiàn)同事就很不喜歡別人改動他的代碼,一次因為有人重構了他的代碼了bug,他當場…展2展222再就是實體之間的賦值,一般都用工具BeanUtils或者
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度茶飲連鎖品牌全國代理權獨家協(xié)議
- 幼兒園學生人身安全賠償協(xié)議范本2025
- 二零二五年度汽車行業(yè)售后服務聘用勞動合同
- 2025年泰州貨運上崗證考試多少道題
- 家長會發(fā)言稿范文芳
- 2025年臺州資格證模擬考試
- 2025年德宏駕駛員貨運從業(yè)資格證模擬考試
- 2025年南通貨運運輸駕駛員從業(yè)資格證考試試題
- 電子商務平臺大數(shù)據(jù)精準營銷策略
- 2025年崇左b2貨運資格證考試題庫
- 綠色金融案例分析實證分析報告
- 【屋頂花園的防水設計與施工探究6500字(論文)】
- 自導式教學心得體會范文【3篇】
- 防范游戲充值詐騙保護個人游戲賬號安全
- 數(shù)學與體育融合課程設計
- 七年級英語閱讀理解專項訓練(含答案)共20篇
- 初步設計法律規(guī)范
- 社區(qū)獲得性肺炎疾病查房
- 神奇的光:如何形成彩虹
- 三、膽石癥課件
- 兔子坡(閱讀課上課課件)
評論
0/150
提交評論