版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、重重構的一點思構的一點思考考再談重構再談重構What is Refactoring Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure.-Martin Fowler我們寫代碼時,只關注它的正確性,只要機器認識,通過測試就OK了 Our code = 忽略未來的維護人員維護人員看我們的代碼時花費更多的時間來理解代碼/* xx
2、x 2009-10-21 shit UAP有bug,不修改,偏要我們通過這種奇淫技巧進行解決問題 * 如果不增加一下幾行廢物代碼的話,那么畫面的filedgroup就會莫名其妙的丟失,原因是調(diào)用了 * billcardpnl.setBillData(billcardpnl.getBillData(); * */SolutionRefactoringTip:Any fool can write code that a computer can understand. Good programmers write code that humans can understand.Why Refact
3、oringThe one constant is software developmentRefactoring持持續(xù)改續(xù)改進軟件設計進軟件設計使代碼更易為人所理使代碼更易為人所理解解任何一個人都能寫出計算機可以理解的程序,只有寫出人容易理解的程序才是優(yōu)秀的程序員!幫助發(fā)現(xiàn)隱藏的代碼缺陷幫助發(fā)現(xiàn)隱藏的代碼缺陷有助于提高編程效率有助于提高編程效率When RefactoringThe Rule of Three在添加新功能時進行在添加新功能時進行重構重構重構程序,使得加入新功能變得簡單添加這個功能在修改在修改bug時進行重時進行重構構在代在代碼評審碼評審時進行重構時進行重構When Not Re
4、factoring 現(xiàn)有的程序無法運行現(xiàn)有的程序無法運行,此時應該是重寫程序此時應該是重寫程序,而而不是重構程不是重構程序序到了最后的交付期限到了最后的交付期限重重構中的構中的難難題題Database修改接口難以通過重構手法完成的設計改動無安全需求 安全性良好11Bad SmellsDuplicated CodeLong MethodLarge Class Long Parameter ListDivergent ChangeShortgun SurgeryFeature EnvyData ClumpsPrimitive ObsessionSwitch StatementsParallel I
5、nheritance HierarchiesLazy ClassSpeculative GeneralityTemporary FieldMessage ChainsMiddle ManInappropriate IntimacyAlternative Classes with Different InterfacesIncomplete Library ClassData ClassRefused BequestComments Oscar Nierstrasz8.12Typical RefactoringsClass RefactoringsMethod RefactoringsAttri
6、bute Refactoringsadd (sub)class to hierarchyadd method to classadd variable to classrename classrename methodrename variableremove classremove methodremove variablepush method downpush variable downpush method uppull variable upadd parameter to methodcreate accessorsmove method to component abstract
7、 variableextract code in new methodDuplicated CodeSmell同樣的代碼出現(xiàn)了兩次或更多次!同樣的代碼出現(xiàn)了兩次或更多次!!違反DRY(Dont Repeat Yourself)RefactorExtract methodExtract method可讀性可讀性重復代碼抽取方法nc.impl.emship.palletlist.PaletlistQueryImplL274L437L580Duplicated CodeSmell同樣的代碼出現(xiàn)在不同的子類中!同樣的代碼出現(xiàn)在不同的子類中!!違反DRYRefactorExtract methodPul
8、l up fieldPull up methodPull up method兩個子類有重復的代碼提取重復的代碼至父類Duplicated CodeSmell子類代碼類似但不相同Refactor:使用 Extract Method 分離出變化的代碼與相似的代碼 使用使用 Form Template Method.重復代碼erdeli.rule.insert.CheckUniqueForInsertFiltRerdeli.rule.insert.CheckUniqueUpdateRule重復代碼工
9、具類erdeli.action.InterdeliCopyAerdeli.action.InterdeliAddAerdeli.mediator.OrgChangedForInterdeliEditorTODOForm Template Method重復代碼Form Template Mcplan.replreq.Rewrite20ForYG24Impl項目采購替代申請刪除回寫采購計劃reW
10、riteProcplanNumForYG24(ReplReqVO_111)替代申請保存回寫累加請購單對應的采購計劃reWrite20RepNumForYG24(ReplReqVO_111)cplan.alter.ProcPlanNQAheadAcplan.alter.ProcPlanNQAfterAlert重復代碼Form Template Method1、加鎖2、獲取回寫Map3、查詢請購單4、處理請購單行狀態(tài)5、構造項目計劃待更新集合6、更新項目采購計劃裝備631重復代碼統(tǒng)計后果怎么
11、產(chǎn)生CtrlCtrl+C+C, Ctrl+V, Ctrl+ Ctrl+V, Ctrl+S S不同的人寫了相同功能的代碼不同的人寫了相同功能的代碼你該怎么辦?你該怎么辦?注重設計規(guī)范SONAR重構Long MethodLong method VS short methodLive best and longerThe longer a procedure is, the more difficult it is to understandGood naming(if you have a good name for a method you dont need to look at the bo
12、dy.)盡盡量分解量分解Long Method注注釋可能是抽取小方法的信號釋可能是抽取小方法的信號Long MethodExtract MethodReplace Temp with QueryDecompose Condition33Replace Temp with Query(以查詢?nèi)〈R時變量)double basePrice = quantity * itemPrice; if (basePrice 1000) return basePrice * 0.95; else return basePrice * 0.98; if (basePrice() 1000) return bas
13、ePrice() * 0.95; else return basePrice() * 0.98;private double basePrice() return quantity * itemPrice; Decompose Condition復雜的條件邏輯增加可讀性nc.ui.empcd.distrbill.distrbill.validator.SaveSignInNumValidator.checkReplaceCmaterial()Large Class太多的職責 太多的實例變量Extract ClassLong parameter list使用全局變量嗎?其他方法都可以修改破壞封裝
14、多線程問題Introduce Parameter ObjectPreserve Whole ObjectIntroduce Parameter ObjectPreserve Whole Object其他Replace Array with objectReplace Magic Number with symbolic ConstantReplace Array with objectnc.ui.emic.accreq.subaccessoryout.action.AccessoryJoinCheckAction.doAction(ActionEvent)Replace Magic Numbe
15、r with symbolic ConstantTest你敢重構嗎?重構工具Unit Test重構一些建議在開始重構之前,花時間弄清楚復雜的代碼邏輯。保存初始代碼把要做的事情一條條列出來根據(jù)重構風險級別來調(diào)整重構方法重構的步伐請小一些利用編譯器警告信息附錄1得墨忒耳Kent Beck說: 查詢方法:如果一個對象有很多邏輯都依賴于另一個對象的狀態(tài),可能意味著邏輯放錯了地方,得墨忒耳法則說明:使用對象內(nèi)部的某個屬性時,不要用貫穿的方法去直接讀取,應該使用一個包裝過的讀取函數(shù)。 得墨忒耳法則規(guī)定,某個對象中的任何方法內(nèi)部,都應該只調(diào)用以下內(nèi)容: 1它自身。 2 傳入該方法的任何參數(shù),但不包括參數(shù)對象的屬性。 3 方法內(nèi)部
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度VIP會員金融服務合同
- 二零二五年度個人消費信用貸款合同及借條制定2篇
- 二零二五年度個人商鋪租賃合同(含品牌合作與推廣支持)3篇
- 專題二 基于生物學科核心素養(yǎng)的說課稿概述-高中生物單元說課稿
- 2025年魯人版選修6歷史上冊月考試卷含答案
- 2025年統(tǒng)編版2024九年級化學下冊月考試卷含答案
- 2025年浙教新版必修3地理下冊階段測試試卷
- 2024年滬科版九年級數(shù)學下冊月考試卷含答案
- 2025年粵教新版第二冊地理上冊階段測試試卷
- 2024年北師大版六年級英語上冊階段測試試卷
- 《自然辯證法》課后習題答案自然辯證法課后題答案
- 造價咨詢結算審核服務方案
- 中國人民財產(chǎn)保險股份有限公司機動車綜合商業(yè)保險條款
- 燃氣工程監(jiān)理實施細則(通用版)
- E車E拍行車記錄儀說明書 - 圖文-
- 人才梯隊-繼任計劃-建設方案(珍貴)
- 《健身氣功》(選修)教學大綱
- 王家?guī)r隧道工程地質(zhì)勘察報告(總結)
- 《昆明的雨》優(yōu)質(zhì)課一等獎(課堂PPT)
- 3-1、征信異議申請表
- EHS的組織架構和職責說明(共2頁)
評論
0/150
提交評論