《代码整洁之道》读后感
最近在看Bob大叔的《代碼整潔之道》,收益頗多,有些怕忘記,然更多則是做記錄時(shí),會(huì)理解的更加深刻,力求描述清楚,需要對(duì)知識(shí)更深的理解,遂在此做筆記。共同探討,共同學(xué)習(xí)。
一 簡(jiǎn)潔設(shè)計(jì)原則
Bob大叔借鑒過(guò)多位行業(yè)大牛說(shuō)過(guò)的話,總結(jié)出構(gòu)建簡(jiǎn)潔之道:
二 命名必須有有意義
包含有variable、method、parameter、class、package,甚至是jar文件,war文件,ear文件。那么該怎么命名呢,有很多的規(guī)則
三 函數(shù)(method)
參考類,juc中的ReentrantLock.java,我看完所有的代碼,發(fā)現(xiàn)最長(zhǎng)的一個(gè)method是15行,大多是1到5行代碼就搞定。
四 注釋
注釋的恰當(dāng)用法是彌補(bǔ)我們?cè)谟么a表達(dá)意圖時(shí)遭遇的失敗。代碼可以表達(dá)清楚的事情,就不要用注釋。除非你要寫復(fù)雜的并發(fā)代碼,或者是通用框架類,否則一般的業(yè)務(wù)代碼就盡量不要用到注釋。代碼可以被修改,但別人基本不會(huì)修改你寫的注釋,這會(huì)使得注釋具有誤導(dǎo)性。真實(shí)只有一處地方有:代碼。代碼會(huì)告訴你它做的事情,唯一準(zhǔn)確的信息來(lái)源。
注釋掉的代碼直接刪除,無(wú)需留著,源代碼控制工具(git,svn)會(huì)幫我們記錄這一切的。
五 格式
我們大多數(shù)人使用的開(kāi)發(fā)工具(eclipse和idea),已經(jīng)自帶了格式化規(guī)范。在代碼寫完之后,使用快捷鍵格式化一下即可。
函數(shù)如果有調(diào)用的關(guān)系,則盡量把他們放在一起,而且調(diào)用者應(yīng)該盡可能放在被調(diào)用者上邊。
這里需要提一下的就是代碼規(guī)范規(guī)則,目前國(guó)內(nèi)Java行業(yè)標(biāo)準(zhǔn)有阿里開(kāi)源的開(kāi)發(fā)規(guī)范,已經(jīng)被很多的公司采用,使用阿里規(guī)范作為標(biāo)準(zhǔn)也是不錯(cuò)的。
六 對(duì)象和數(shù)據(jù)結(jié)構(gòu)
對(duì)于面向?qū)ο缶幊虂?lái)說(shuō),這一章的內(nèi)容其實(shí)意義不是特別大,因?yàn)榛镜囊?guī)則現(xiàn)在已經(jīng)定義好了。只是Bob大叔當(dāng)時(shí)的代碼理念可能還沒(méi)有像現(xiàn)在這么全面。唯一需要說(shuō)的就是迪米特法則(Law of Demeter),這個(gè)我會(huì)在附錄中列舉出來(lái)。
七 錯(cuò)誤處理
八 邊界
在和第三方的接口進(jìn)行交互的時(shí)候,極力推薦將應(yīng)該讓別人知道的方法放出來(lái),而其他對(duì)別人無(wú)用的接口則封裝起來(lái)。
對(duì)第三方的代碼編寫一些測(cè)試,以便新版本發(fā)布后,還可以繼續(xù)使用。
假定一些dummy數(shù)據(jù)來(lái)作為第三方數(shù)據(jù)的來(lái)源。
對(duì)于第三方的接口,我們可以用Adapter模式來(lái)做一些適配。
九 測(cè)試
測(cè)試這一章基本放棄了,因?yàn)槲覀児静蛔⒅販y(cè)試,也沒(méi)有寫過(guò)單元測(cè)試。但規(guī)則還是一樣的。
十 類
類應(yīng)該盡量設(shè)計(jì)的短小一些。這里會(huì)涉及到3個(gè)原則,單一職責(zé)原則、開(kāi)閉原則和依賴倒置原則。
十一 如何建造一個(gè)城市
十二 迭進(jìn)
十三 并發(fā)編程
并發(fā)編程用的較少,不發(fā)表意見(jiàn)。建議掌握java.util.concurrent、java.util.concurrent.atomic和java.utils.concurrent.locks包。
十四到十六
這三章是3個(gè)真實(shí)的案例,通過(guò)代碼實(shí)踐了一些思想。可對(duì)照著十七章的一起分析。
十七 味道與啟發(fā)
17.1 注釋
17.2 環(huán)境
17.3 函數(shù)
17.4 一般性問(wèn)題
17.5 Java
17.6 名稱
17.7 測(cè)試
附錄
1. 開(kāi)閉原則:open-close principle
一個(gè)軟件實(shí)體諸如類或模塊或函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)。
優(yōu)點(diǎn):提高軟件系統(tǒng)的可復(fù)用性以及可維護(hù)性。
2. 依賴倒置原則:Dependence Inversion Principle
程序要依賴于抽象接口,不要依賴于具體實(shí)現(xiàn)。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。
3. 單一職責(zé)原則:Single Responsibility Principle
不要存在多于一個(gè)導(dǎo)致類變更的原因
一個(gè)類,接口,方法只負(fù)責(zé)一項(xiàng)職責(zé)
優(yōu)點(diǎn):降低類的復(fù)雜度,提高類的可讀性,提高系統(tǒng)的可維護(hù)性,降低變更引起的風(fēng)險(xiǎn)。
4. 接口隔離原則:Interface Segregation Principle
客戶端不應(yīng)該依賴它不需要的接口。一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
使用多個(gè)專門的接口比使用單一的總接口要好。
一個(gè)類對(duì)另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小的接口上的。
優(yōu)點(diǎn):1.避免接口污染;2.提高靈活性;3.提供定制服務(wù);4.實(shí)現(xiàn)高內(nèi)聚
5. 迪米特法則:Law Of Demeter
一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。又叫最少知道法則。
盡量降低類與類之間的耦合。
優(yōu)點(diǎn):降低類之間的耦合。
6. 里氏替換原則:Liskov Substitution Principle LSP
里氏替換原則(LSP)是面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏替換原則中說(shuō),任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。 LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為
優(yōu)點(diǎn):1.約束繼承泛濫,開(kāi)閉原則的一種體現(xiàn)。
2.加強(qiáng)程序的健壯性,同時(shí)變更時(shí)也可以做到非常好的兼容性,提高程序的維護(hù)性,擴(kuò)展性。降低需求變更時(shí)引入的風(fēng)險(xiǎn)。
7. 合成復(fù)用原則:Composite Reuse Principle CRP
它要求在軟件復(fù)用時(shí),要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)。
優(yōu)點(diǎn):
總結(jié)
以上是生活随笔為你收集整理的《代码整洁之道》读后感的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python无法使用1号gpu_详解te
- 下一篇: es6 --- 使用proxy对数据进