算是讀書筆記吧
極客時(shí)間--設(shè)計(jì)模式之美
設(shè)計(jì)模式的作用
Talk is cheap章钾,show me the code
代碼能力是一個(gè)程序員最基礎(chǔ)的能力嘹朗,是基本功俐载,是展示一個(gè)程序員基礎(chǔ)素養(yǎng)的最直接的衡量標(biāo)準(zhǔn)晨逝。你寫的代碼捧存,實(shí)際上就是你名片。
提升思想維度
讓你可以降維的觀察舊的代碼爸邢,從更高的維度審視代碼中存在的問題樊卓。
如何評(píng)價(jià)代碼質(zhì)量的高低?
代碼的評(píng)價(jià)杠河,是一個(gè)非常主觀的事情碌尔。
怎么樣的代碼才算可讀性好,每個(gè)人的評(píng)判標(biāo)準(zhǔn)都不大一樣券敌。
評(píng)價(jià)的準(zhǔn)確度唾戚,跟工程師自身經(jīng)驗(yàn)有極大的關(guān)系。
最常用到幾個(gè)評(píng)判代碼質(zhì)量的標(biāo)準(zhǔn)是:可維護(hù)性待诅、可讀性叹坦、可擴(kuò)展性、靈活性卑雁、簡(jiǎn)潔性募书、可復(fù)用性、可測(cè)試性测蹲。
其中莹捡,可維護(hù)性、可讀性扣甲、可擴(kuò)展性又是提到最多的篮赢、最重要的三個(gè)評(píng)價(jià)標(biāo)準(zhǔn)
1. 可維護(hù)性(maintainability)
如果 bug 容易修復(fù),修改、添加功能能夠輕松完成启泣,那我們就可以主觀地認(rèn)為代碼對(duì)我們來說易維護(hù)涣脚。
所謂“代碼易維護(hù)
”就是指,在不破壞原有代碼設(shè)計(jì)寥茫、不引入新的 bug 的情況下遣蚀,能夠快速地修改或者添加代碼。
所謂“代碼不易維護(hù)
”就是指坠敷,修改或者添加代碼需要冒著極大的引入新 bug 的風(fēng)險(xiǎn)妙同,并且需要花費(fèi)很長(zhǎng)的時(shí)間才能完成射富。
2. 可讀性(readability)
通過良好的編程規(guī)范以及注釋膝迎,讓代碼清晰易懂
任何傻瓜都會(huì)編寫計(jì)算機(jī)能理解的代碼。好的程序員能夠編寫人能夠理解的代碼胰耗。
代碼的可讀性
在非常大程度上會(huì)影響代碼的可維護(hù)性
限次,code review
是一個(gè)很好的測(cè)驗(yàn)代碼可讀性的手段:
如果你的同事可以輕松地讀懂你寫的代碼,那說明你的代碼可讀性很好柴灯;
如果同事在讀你的代碼時(shí)卖漫,有很多疑問,那就說明你的代碼可讀性有待提高了赠群。
3. 可擴(kuò)展性(extensibility)
在不修改或少量修改原有代碼的情況下羊始,可以通過擴(kuò)展的方式添加新的功能代碼。
開閉原則
(對(duì)修改關(guān)閉查描,對(duì)擴(kuò)展開放)為此而生突委,絕大多數(shù)設(shè)計(jì)模式的指導(dǎo)思想正是開閉原則
。
- 靈活性(flexibility)
簡(jiǎn)而言之冬三,靈活就是以很小的代價(jià)應(yīng)對(duì)新需求和變動(dòng)
如果一段代碼易擴(kuò)展匀油、易復(fù)用或者易用,我們都可以稱這段代碼寫得比較靈活勾笆。
- 簡(jiǎn)潔性(simplicity)
盡量保持代碼簡(jiǎn)單敌蚜、邏輯清晰。
思從深而行從簡(jiǎn)窝爪,真正的高手能云淡風(fēng)輕地用最簡(jiǎn)單的方法解決最復(fù)雜的問題弛车。這也是一個(gè)編程老手跟編程新手的本質(zhì)區(qū)別之一。
在開發(fā)初期
蒲每,除非特別必須纷跛,我們一定不要過度設(shè)計(jì)
,應(yīng)用復(fù)雜的設(shè)計(jì)模式啃勉。
而是當(dāng)代碼出現(xiàn)問題
的時(shí)候忽舟,我們?cè)籴槍?duì)問題,應(yīng)用原則和模式進(jìn)行重構(gòu)
。
這樣就能有效避免前期的過度設(shè)計(jì)叮阅。
- 可復(fù)用性(reusability)
盡量減少重復(fù)代碼的編寫刁品,復(fù)用已有的代碼。
面向?qū)ο蟮睦^承浩姥、多態(tài)特性存在的目的之一挑随,就是為了提高代碼的可復(fù)用性。
設(shè)計(jì)模式里像單一職責(zé)原則等也跟代碼的可復(fù)用性相關(guān)勒叠。
重構(gòu)時(shí)的解耦兜挨、高內(nèi)聚、模塊化等都能提高代碼的可復(fù)用性眯分。
當(dāng)然拌汇,也不要為了復(fù)用而復(fù)用。比如不同職責(zé)的代碼弊决,可能初期長(zhǎng)得一樣噪舀。但是隨著項(xiàng)目成長(zhǎng)可能發(fā)展的截然不同。
- 可測(cè)試性(testability)
主要看代碼是否支持單元測(cè)試
如何寫出高質(zhì)量的代碼飘诗?
面向?qū)ο笾械睦^承与倡、多態(tài)能讓我們寫出可復(fù)用的代碼;
編碼規(guī)范能讓我們寫出可讀性好的代碼昆稿;
設(shè)計(jì)原則中的單一職責(zé)纺座、DRY、基于接口而非實(shí)現(xiàn)溉潭、里式替換原則等净响,可以讓我們寫出可復(fù)用、靈活岛抄、可讀性好别惦、易擴(kuò)展、易維護(hù)的代碼夫椭;
設(shè)計(jì)模式可以讓我們寫出易擴(kuò)展的代碼掸掸;持續(xù)重構(gòu)可以時(shí)刻保持代碼的可維護(hù)性;
編碼時(shí)的五個(gè)指導(dǎo)思想
- 面向?qū)ο缶幊痰奶匦允呛芏嘣O(shè)計(jì)原則蹭秋、設(shè)計(jì)模式等編碼實(shí)現(xiàn)的基礎(chǔ)
封裝扰付、抽象、繼承仁讨、多態(tài)
的特性的使用羽莺,是很多設(shè)計(jì)模式運(yùn)作的根基。
- 設(shè)計(jì)原則是代碼設(shè)計(jì)的指導(dǎo)思想
比如洞豁,“
開閉原則
”是很多設(shè)計(jì)模式(策略盐固、模板等)的指導(dǎo)原則
荒给。
- 設(shè)計(jì)模式是具體方法
主要為了提高代碼
可擴(kuò)展性
從抽象程度上來講,設(shè)計(jì)原則比設(shè)計(jì)模式更抽象刁卜。
- 編程規(guī)范最細(xì)化的解決可讀性問題
更加偏重代碼細(xì)節(jié)志电、更加能落地
- 持續(xù)重構(gòu)可以有效保持代碼質(zhì)量
結(jié)合各種方法論,提升代碼質(zhì)量