版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
重構(gòu)的一點(diǎn)思考——再談重構(gòu)WhatisRefactoringRefactoringistheprocessofchangingasoftwaresysteminsuchawaythatitdoesnotaltertheexternalbehaviorofthecodeyetimprovesitsinternalstructure.--
MartinFowler我們寫代碼時(shí),只關(guān)注它的正確性,只要機(jī)器認(rèn)識(shí),通過測(cè)試就OK了
Ourcode=忽略未來的維護(hù)人員維護(hù)人員看我們的代碼時(shí)花費(fèi)更多的時(shí)間來理解代碼/*xxx2009-10-21shitUAP有bug,不修改,偏要我們通過這種奇淫技巧進(jìn)行解決問題*如果不增加一下幾行廢物代碼的話,那么畫面的filedgroup就會(huì)莫名其妙的丟失,原因是調(diào)用了*billcardpnl.setBillData(billcardpnl.getBillData());**/SolutionRefactoringTip:Anyfoolcanwritecodethatacomputercanunderstand.Goodprogrammerswritecodethathumanscanunderstand.WhyRefactoringTheoneconstantissoftwaredevelopmentChangeRefactoring持續(xù)改進(jìn)軟件設(shè)計(jì)使代碼更易為人所理解任何一個(gè)人都能寫出計(jì)算機(jī)可以理解的程序,只有寫出人容易理解的程序才是優(yōu)秀的程序員!幫助發(fā)現(xiàn)隱藏的代碼缺陷有助于提高編程效率WhenRefactoringTheRuleofThree在添加新功能時(shí)進(jìn)行重構(gòu)重構(gòu)程序,使得加入新功能變得簡(jiǎn)單添加這個(gè)功能在修改bug時(shí)進(jìn)行重構(gòu)在代碼評(píng)審時(shí)進(jìn)行重構(gòu)WhenNotRefactoring
現(xiàn)有的程序無(wú)法運(yùn)行,此時(shí)應(yīng)該是重寫程序,而不是重構(gòu)程序到了最后的交付期限重構(gòu)中的難題Database修改接口難以通過重構(gòu)手法完成的設(shè)計(jì)改動(dòng)無(wú)安全需求安全性良好
11BadSmellsDuplicatedCodeLongMethodLargeClassLongParameterListDivergentChangeShortgunSurgeryFeatureEnvyDataClumpsPrimitiveObsessionSwitchStatementsParallelInheritanceHierarchiesLazyClassSpeculativeGeneralityTemporaryFieldMessageChainsMiddleManInappropriateIntimacyAlternativeClasseswithDifferentInterfacesIncompleteLibraryClassDataClassRefusedBequestComments?OscarNierstrasz8.12TypicalRefactoringsClassRefactoringsMethodRefactoringsAttributeRefactoringsadd(sub)classtohierarchyaddmethodtoclassaddvariabletoclassrenameclassrenamemethodrenamevariableremoveclassremovemethodremovevariablepushmethoddownpushvariabledownpushmethoduppullvariableupaddparametertomethodcreateaccessorsmovemethodtocomponentabstractvariableextractcodeinnewmethodDuplicatedCodeSmell同樣的代碼出現(xiàn)了兩次或更多次!!!違反DRY(Don’tRepeatYourself)RefactorExtractmethodExtractmethod可讀性重復(fù)代碼——抽取方法nc.impl.emship.palletlist.PaletlistQueryImplL274L437L580DuplicatedCodeSmell同樣的代碼出現(xiàn)在不同的子類中??!!違反DRYRefactorExtractmethodPullupfieldPullupmethodPullupmethod兩個(gè)子類有重復(fù)的代碼提取重復(fù)的代碼至父類DuplicatedCodeSmell子類代碼類似但不相同Refactor:使用
ExtractMethod
分離出變化的代碼與相似的代碼
使用
FormTemplateMethod.重復(fù)代碼erdeli.rule.insert.CheckUniqueForInsertFiltRerdeli.rule.insert.CheckUniqueUpdateRule重復(fù)代碼——工具類erdeli.action.InterdeliCopyAerdeli.action.InterdeliAddAerdeli.mediator.OrgChangedForInterdeliEditorTODOFormTemplateMethod重復(fù)代碼——FormTemplateMcplan.replreq.Rewrite20ForYG24Impl項(xiàng)目采購(gòu)替代申請(qǐng)刪除回寫采購(gòu)計(jì)劃reWriteProcplanNumForYG24(ReplReqVO_111[])替代申請(qǐng)保存回寫累加請(qǐng)購(gòu)單對(duì)應(yīng)的采購(gòu)計(jì)劃reWrite20RepNumForYG24(ReplReqVO_111[])cplan.alter.ProcPlanNQAheadAcplan.alter.ProcPlanNQAfterAlert重復(fù)代碼——FormTemplateMethod1、加鎖2、獲取回寫Map3、查詢請(qǐng)購(gòu)單4、處理請(qǐng)購(gòu)單行狀態(tài)5、構(gòu)造項(xiàng)目計(jì)劃待更新集合6、更新項(xiàng)目采購(gòu)計(jì)劃裝備631重復(fù)代碼統(tǒng)計(jì)后果怎么產(chǎn)生Ctrl+C,Ctrl+V,Ctrl+S不同的人寫了相同功能的代碼你該怎么辦?注重設(shè)計(jì)規(guī)范SONAR重構(gòu)LongMethodLongmethodVSshortmethodLivebestandlongerThelongeraprocedureis,themoredifficultitistounderstandGoodnaming(ifyouhaveagoodnameforamethodyoudon'tneedtolookatthebody.)盡量分解LongMethod注釋可能是抽取小方法的信號(hào)LongMethodExtractMethodReplaceTempwithQueryDecomposeCondition
33ReplaceTempwithQuery(以查詢?nèi)〈R時(shí)變量)doublebasePrice=quantity*itemPrice;if(basePrice>1000){returnbasePrice*0.95;}else{ returnbasePrice*0.98;}
if(basePrice()>1000){returnbasePrice()*0.95;}else{returnbasePrice()*0.98;}privatedoublebasePrice(){
returnquantity*itemPrice;}DecomposeCondition復(fù)雜的條件邏輯增加可讀性nc.ui.empcd.distrbill.distrbill.validator.SaveSignInNumValidator.checkReplaceCmaterial()LargeClass太多的職責(zé)太多的實(shí)例變量ExtractClassLongparameterlist使用全局變量嗎?其他方法都可以修改破壞封裝多線程問題IntroduceParameterObjectPreserveWholeObjectIntroduceParameterObjectPreserveWholeObject其他ReplaceArraywithobjectReplaceMagicNumberwithsymbolicConstantReplaceArraywithobjectnc.ui.emic.accreq.subaccessoryout.action.AccessoryJoinCheckAction.doAction(ActionEvent)ReplaceMagicNumberwithsymbolicConstantTest你敢重構(gòu)嗎?重構(gòu)工具Unit
Test重構(gòu)一些建議在開始重構(gòu)之前,花時(shí)間弄清楚復(fù)雜的代碼邏輯。保存初始代碼把要做的事情一條條列出來根據(jù)重構(gòu)風(fēng)險(xiǎn)級(jí)別來調(diào)整重構(gòu)方法重構(gòu)的步伐請(qǐng)小一些利用編譯器警告信息附錄1得墨忒耳KentBeck說:
查詢方法:如果一個(gè)對(duì)象有很多邏輯都依賴于另一個(gè)對(duì)象的狀態(tài),可能意味著邏輯放錯(cuò)了地方,①得墨忒耳法則說明:使用對(duì)象內(nèi)部的某個(gè)屬性時(shí),不要用貫穿的方法去直接讀取,應(yīng)該使用一個(gè)包裝過的讀取函數(shù)。得墨忒耳法則規(guī)定,某個(gè)對(duì)象中的任何方法內(nèi)部,都應(yīng)該只調(diào)用以下內(nèi)容:
1它自身。
2傳入該方法的任何參數(shù),但不包括參數(shù)對(duì)象的屬性。
3方法內(nèi)部創(chuàng)建的任何對(duì)象。
4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)藝術(shù)學(xué)(音樂欣賞)試題及答案
- 七年級(jí)生物(生物體的結(jié)構(gòu))2026年上學(xué)期期末測(cè)試卷
- 2025年大學(xué)大三(統(tǒng)計(jì)學(xué))多元統(tǒng)計(jì)分析基礎(chǔ)試題及答案
- 2025年大學(xué)(公共關(guān)系學(xué))危機(jī)公關(guān)處理期末試題及答案
- 第2講 帶電粒子在磁場(chǎng)中的運(yùn)動(dòng)
- 中職第二學(xué)年(內(nèi)科護(hù)理)內(nèi)科常見病護(hù)理2026年綜合測(cè)試題及答案
- 2025年高職軟件工程(面向?qū)ο缶幊蹋┰囶}及答案
- 深度解析(2026)GBT 18310.39-2001纖維光學(xué)互連器件和無(wú)源器件 基本試驗(yàn)和測(cè)量程序 第2-39部分試驗(yàn) 對(duì)外界磁場(chǎng)敏感性
- 深度解析(2026)《GBT 17980.110-2004農(nóng)藥 田間藥效試驗(yàn)準(zhǔn)則(二) 第110部分殺菌劑防治黃瓜細(xì)菌性角斑病》
- 深度解析(2026)《GBT 17967-2000信息技術(shù) 開放系統(tǒng)互連 基本參考模型 OSI服務(wù)定義約定》
- 鋼結(jié)構(gòu)工程施工方案及主要技術(shù)措施
- 中華民族共同體概論教案第八講-共奉中國(guó)與中華民族內(nèi)聚發(fā)展
- 【高效備課】《產(chǎn)業(yè)轉(zhuǎn)移》
- 九年級(jí)物理上冊(cè) 15.4探究焦耳定律教案 (新版)粵教滬版
- 2024年中華人民共和國(guó)企業(yè)所得稅年度納稅申報(bào)表(帶公式)20240301更新
- 饅頭項(xiàng)目投資計(jì)劃書
- 2023年融資租賃風(fēng)控主管年度總結(jié)及下一年展望
- DLT817-2014 立式水輪發(fā)電機(jī)檢修技術(shù)規(guī)程
- 數(shù)學(xué)課程設(shè)計(jì)與實(shí)施
- 人工智能在機(jī)械制造中的應(yīng)用
- 第5章-隧道通風(fēng)-《通風(fēng)工程(第2版)》教學(xué)課件
評(píng)論
0/150
提交評(píng)論