![復(fù)雜系統(tǒng)架構(gòu)治理終極難題之重構(gòu)_第1頁(yè)](http://file4.renrendoc.com/view14/M00/3E/0D/wKhkGWeIhTyAR3RFAAFURx3PE2w969.jpg)
![復(fù)雜系統(tǒng)架構(gòu)治理終極難題之重構(gòu)_第2頁(yè)](http://file4.renrendoc.com/view14/M00/3E/0D/wKhkGWeIhTyAR3RFAAFURx3PE2w9692.jpg)
![復(fù)雜系統(tǒng)架構(gòu)治理終極難題之重構(gòu)_第3頁(yè)](http://file4.renrendoc.com/view14/M00/3E/0D/wKhkGWeIhTyAR3RFAAFURx3PE2w9693.jpg)
![復(fù)雜系統(tǒng)架構(gòu)治理終極難題之重構(gòu)_第4頁(yè)](http://file4.renrendoc.com/view14/M00/3E/0D/wKhkGWeIhTyAR3RFAAFURx3PE2w9694.jpg)
![復(fù)雜系統(tǒng)架構(gòu)治理終極難題之重構(gòu)_第5頁(yè)](http://file4.renrendoc.com/view14/M00/3E/0D/wKhkGWeIhTyAR3RFAAFURx3PE2w9695.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
演講人:王曉波重構(gòu)的意義重構(gòu)-Refactoring重構(gòu)的定義重構(gòu)的目的重構(gòu)和重寫重構(gòu)
名詞對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。重構(gòu)
動(dòng)詞使用一系列重構(gòu)的手法,在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu)。a2m.msup.com.cn重構(gòu)-
Refactoring保持行為不變a2m.msup.com.cn盡管重構(gòu)會(huì)對(duì)代碼的內(nèi)部結(jié)構(gòu)進(jìn)行調(diào)整,但其功能和對(duì)外表現(xiàn)必須保持一致。內(nèi)部?jī)?yōu)化重構(gòu)關(guān)注的是代碼的內(nèi)部實(shí)現(xiàn),通過(guò)改善代碼結(jié)構(gòu)來(lái)使其更具模塊化、更易理解和維護(hù)。持續(xù)性貫穿在軟件開發(fā)的各個(gè)階段,而不是一次性的任務(wù)。持續(xù)的重構(gòu)可以防止代碼質(zhì)量在開發(fā)過(guò)程中逐漸惡化。重構(gòu)-
Refactoring目標(biāo)01.
提高可讀性a2m.msup.com.cn清晰且易于理解的代碼使開發(fā)人員能夠更快速地理解和上手03.
減少重復(fù)和相似代碼消除重復(fù)代碼,減少維護(hù)多個(gè)相似代碼片段的成本02.
增加可維護(hù)性使得錯(cuò)誤更容易被發(fā)現(xiàn)和修復(fù),添加功能變得更加高效率04.
提升項(xiàng)目性能在重構(gòu)過(guò)程中常常能夠發(fā)現(xiàn)并修復(fù)性能瓶頸重構(gòu)的目的重構(gòu)和重寫如果重寫比重構(gòu)還容易,就別重構(gòu)了,此時(shí)重寫反而是更高效和正確的選擇!局部范圍,逐步進(jìn)行的低風(fēng)險(xiǎn),不改變外部行為時(shí)間成本低,開發(fā)中同步進(jìn)行不涉及系統(tǒng)架構(gòu)重新設(shè)計(jì)a2m.msup.com.cn重構(gòu)重構(gòu)和重寫重寫全面的,大規(guī)模的改動(dòng)高風(fēng)險(xiǎn),引入新Bug或不兼容時(shí)間成本高,暫停其他工作系統(tǒng)架構(gòu)整個(gè)重新設(shè)計(jì)原則和挑戰(zhàn)重構(gòu)的原則何時(shí)重構(gòu)產(chǎn)品經(jīng)理挑戰(zhàn)風(fēng)險(xiǎn)管理挑戰(zhàn)團(tuán)隊(duì)協(xié)作挑戰(zhàn)重構(gòu)的原則強(qiáng)調(diào)在保證代碼外部行為不變的前提下,通過(guò)逐步的、小規(guī)模的改動(dòng)來(lái)優(yōu)化代碼的內(nèi)部結(jié)構(gòu)。要正確地進(jìn)行重構(gòu),前提是得有一套穩(wěn)固的測(cè)試集合,幫助我們避免疏漏。030102重構(gòu)的原則a2m.msup.com.cn保持行為不變保持已有的測(cè)試用例關(guān)注代碼可讀性,風(fēng)格統(tǒng)一關(guān)注重構(gòu)后的性能變化,逐步優(yōu)化性能優(yōu)化消除,重復(fù)或相似功能的代碼優(yōu)化代碼設(shè)計(jì)和代碼架構(gòu)新功能理解代碼撿垃圾代碼評(píng)審重構(gòu)的最佳時(shí)機(jī)就在添加新功能之前,比如:已經(jīng)有函數(shù)提供了我需要的大部分功能,做一個(gè)簡(jiǎn)單的重構(gòu),就能快速完成功能。當(dāng)我們花費(fèi)了數(shù)分鐘才弄懂“這段代碼到底在做什么”的時(shí)候,就需要考慮重構(gòu)了。撿垃圾方式的重構(gòu),雖然我已經(jīng)理解代碼在做什么,但是發(fā)現(xiàn)它們做得比較差。復(fù)審代碼時(shí)做重構(gòu),當(dāng)我們做
code
review
的時(shí)候,提出一些建議,加入重構(gòu)。何時(shí)重構(gòu)a2m.msup.com.cn“怎么和經(jīng)理說(shuō)重構(gòu)的事情?”經(jīng)理會(huì)認(rèn)為,重構(gòu)要么是在彌補(bǔ)過(guò)去犯下的錯(cuò)誤,要么是不增加價(jià)值的浪費(fèi)人力。如果團(tuán)隊(duì)的經(jīng)理不具備技術(shù)或研發(fā)思維,他們不理解代碼的健康對(duì)生產(chǎn)率的影響,那么就:不要告訴經(jīng)理!重構(gòu)能讓軟件的新功能開發(fā)的更快,受進(jìn)度驅(qū)動(dòng)的經(jīng)理會(huì)要求我們盡快的完成任務(wù)。因?yàn)橹貥?gòu)能讓持續(xù)交付任務(wù)更快,所以我們就做重構(gòu)。來(lái)自產(chǎn)品經(jīng)理的挑戰(zhàn)a2m.msup.com.cn引入新Bug歷史項(xiàng)目兼容性來(lái)自風(fēng)險(xiǎn)管理的挑戰(zhàn)a2m.msup.com.cn現(xiàn)有代碼理解可能比較困難,特別是大型,歷史悠久的項(xiàng)目,代碼缺乏文檔,理解起來(lái)會(huì)更加困難。重構(gòu)可能帶來(lái)一些不可預(yù)見的副作用,引入新的Bug之類。所以需要驗(yàn)證行為不能改變,要有充分的測(cè)試覆蓋,如果測(cè)試功能不完整,會(huì)有風(fēng)險(xiǎn)。隨著技術(shù)的發(fā)展,可能需要將代碼遷移到新的框架或語(yǔ)言,這增加了重構(gòu)的復(fù)雜性,重構(gòu)時(shí)要考慮新舊技術(shù)棧的兼容性,避免引入新的問題。避免沖突團(tuán)隊(duì)成員可能對(duì)重構(gòu)有不同的看法,確保團(tuán)隊(duì)成員在重構(gòu)過(guò)程中保持同步,避免沖突和重復(fù)工作。a2m.msup.com.cn代碼風(fēng)格團(tuán)隊(duì)成員風(fēng)格不一致,可能導(dǎo)致重構(gòu)后的代碼風(fēng)格不統(tǒng)一??梢允褂么a風(fēng)格檢查工具,如Prettier、ESLint等,統(tǒng)一代碼風(fēng)格。資源分配重構(gòu)可能與其他團(tuán)隊(duì)的開發(fā)任務(wù)沖突,導(dǎo)致資源和時(shí)間分配的困難。將重構(gòu)任務(wù)拆分為多個(gè)小的、可管理的迭代,合理分配優(yōu)先級(jí)。新成員新成員可能對(duì)現(xiàn)有代碼和重構(gòu)計(jì)劃不熟悉,導(dǎo)致融入困難??梢源罱ü蚕碇R(shí)庫(kù),幫助新成員快速上手。來(lái)自團(tuán)隊(duì)協(xié)作的挑戰(zhàn)代碼的壞味道壞代碼案例其他壞味道壞味道本身并不僅僅是錯(cuò)誤或bug,也是代碼質(zhì)量的警示信號(hào)。a2m.msup.com.cn理解和識(shí)別這些壞味道,對(duì)于保持代碼的可維護(hù)性和質(zhì)量至關(guān)重要。代碼的壞味道重復(fù)代碼大量重復(fù)這是一段獲取時(shí)間和分鐘的代碼在整個(gè)項(xiàng)目的
31
文件中有
61
段重復(fù)神秘變量命名代碼中的,m,m1,hour,hour1
都不是一個(gè)好名字壞代碼案例a2m.msup.com.cn面向字符串編碼這是一段
Go
語(yǔ)言代碼,Order是數(shù)據(jù)庫(kù)取出來(lái)來(lái)的訂單信息不使用類和對(duì)象的屬性,使用字符串的類型作為屬性的key,失去了編輯器和編譯期的檢查壞代碼案例a2m.msup.com.cn霰彈式修改這段代碼,將
order
對(duì)象的
is_pool_order
屬性轉(zhuǎn)為
int
類型的代碼,散落在項(xiàng)目的各個(gè)地方,如果要修改邏輯,需要修改項(xiàng)目的很多處壞代碼案例a2m.msup.com.cn錯(cuò)誤的利用數(shù)據(jù)類型的特性Go語(yǔ)言
中對(duì)時(shí)間類型
Format
是對(duì)時(shí)間的格式化,返回的類型是String代碼中的意圖很明顯,比較
start_time和
now
哪個(gè)時(shí)間更大。但是,代碼中卻使用了
String
類型的比較,雖然也能符合邏輯預(yù)期,但充滿著壞味道壞代碼案例a2m.msup.com.cn手搓拼裝 j
s
o
n 字符串看過(guò)很多壞味道的項(xiàng)目,代碼拼接
xml,json
等數(shù)據(jù),雖然能正確運(yùn)行,但是有極大的隱患。應(yīng)該使用struct
或
class
來(lái)讓程序序列化生成。另外,變量名拼寫也發(fā)生了錯(cuò)誤,pricePamars
猜測(cè)應(yīng)該是
priceParam
。壞代碼案例a2m.msup.com.cn定時(shí)炸彈這段
Python
代碼可讀性很差,第
3572
行,name[0][0]
有空指針潛在問題。For
循環(huán)的兩層嵌套,時(shí)間復(fù)雜度是
n*m,一般
循環(huán)嵌套
可能都有點(diǎn)壞味道。第
3585
行的
break,意圖不明顯,看到
最后
return
data的代碼,猜測(cè)意圖break應(yīng)該跳出所有For循環(huán),但顯然這里的break
沒有符合預(yù)期。壞代碼案例a2m.msup.com.cn在我電腦上好好的呀!強(qiáng)制的依賴某個(gè)運(yùn)行環(huán)境,導(dǎo)致項(xiàng)目在他的電腦上運(yùn)行的很好,其他環(huán)境就未必。壞代碼案例a2m.msup.com.cn過(guò)長(zhǎng)參數(shù)列表描述:方法的參數(shù)列表過(guò)長(zhǎng),調(diào)用復(fù)雜。影響:增加了調(diào)用復(fù)雜度和理解難度。解決方法:使用數(shù)據(jù)類封裝參數(shù),或者采用方法重載。a2m.msup.com.cn01依戀情結(jié)描述:一個(gè)類頻繁訪問另一個(gè)類的數(shù)據(jù)和方法。影響:職責(zé)劃分不明確,類的內(nèi)聚性低。解決方法:將功能移動(dòng)到更相關(guān)的類中,提高內(nèi)聚性。02神秘命名描述:變量、方法或類的命名不清晰,不能直觀反映其功能。影響:增加了代碼的理解難度。解決方法:使用清晰、描述性且一致的命名。03數(shù)據(jù)暴露描述:類直接暴露內(nèi)部數(shù)據(jù),違背了封裝原則。影響:降低了數(shù)據(jù)的安全性和代碼的維護(hù)性。解決方法:使用getter和setter方法訪問數(shù)據(jù),保持?jǐn)?shù)據(jù)的封裝性。注釋和壞味道當(dāng)你看到一段代碼有著長(zhǎng)長(zhǎng)的注釋,然后發(fā)現(xiàn)這些注釋之所以存在乃是因?yàn)榇a很糟糕,就嗅到了壞味道。其他壞味道04總結(jié)重構(gòu)壞代碼是一個(gè)持續(xù)不斷的過(guò)程,
通過(guò)識(shí)別代碼中的壞味道,
制定重構(gòu)計(jì)劃,
編寫和運(yùn)行測(cè)試,
逐步執(zhí)行重構(gòu),
持續(xù)集成和部署,
并通過(guò)團(tuán)隊(duì)協(xié)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝采購(gòu)合同(2篇)
- 店長(zhǎng)年終工作總結(jié)怎么寫(范文10篇)
- 2025年天津渤海職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年吉林交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025至2031年中國(guó)鋁塑頂開蓋行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)蒸汽(油)加熱不銹鋼反應(yīng)鍋行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)玻璃扎啤杯行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)定型摩絲行業(yè)投資前景及策略咨詢研究報(bào)告
- 教育大數(shù)據(jù)挖掘與分析-深度研究
- 房地產(chǎn)調(diào)控政策解讀
- 2024-2025學(xué)年八年級(jí)數(shù)學(xué)人教版上冊(cè)寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《AP內(nèi)容介紹》課件
- 醫(yī)生定期考核簡(jiǎn)易程序述職報(bào)告范文(10篇)
- 安全創(chuàng)新創(chuàng)效
- 《中國(guó)糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- 2023《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀PPT
- 國(guó)外文化消費(fèi)研究述評(píng)
- 部編版語(yǔ)文四年級(jí)下冊(cè)第一單元 迷人的鄉(xiāng)村風(fēng)景 大單元整體教學(xué)設(shè)計(jì)
- 湖南省長(zhǎng)郡中學(xué)2023-2024學(xué)年高二下學(xué)期寒假檢測(cè)(開學(xué)考試)物理 含解析
- 五年級(jí)行程問題應(yīng)用題100道
評(píng)論
0/150
提交評(píng)論