代碼整潔之道

總結(jié)看完《代碼整潔之道》這本書之后得到的CheckList,可以用來指導(dǎo)之后的代碼review和重構(gòu)台腥。

命名

  1. 名副其實(shí)宏赘,替換更好的名字
  2. 使用有意義的變量名
  3. 用可搜索的名字
  4. 類名使用名詞,方法名使用動詞黎侈,方法名+參數(shù)使用動詞短語
  5. 一個概念一個詞
  6. 良好的描述技巧察署,共同的文化背景峻汉。

函數(shù)

  1. 函數(shù)要短小贴汪。一個函數(shù)只含有一個if-else
  2. 只做一件事
  3. 一個函數(shù)一個抽象層級。
  4. 描述性的名稱嘶是。
  5. 參數(shù)越少越好。
  6. 使用異常代替錯誤碼蛛碌。
  7. 消除重復(fù)聂喇,提取出公共方法。
  8. 持續(xù)打磨蔚携,精益求精。

注釋

  1. 注釋是代碼表達(dá)的失敗
  2. 一般注釋都不會得到維護(hù)酝蜒。

格式

  1. 單個文件(class)的最大限制是500行誊辉,多數(shù)應(yīng)該小于200行。
  2. 像報(bào)紙一樣亡脑,先給出大綱堕澄,再逐個給出細(xì)節(jié)實(shí)現(xiàn)。
  3. 不同概念的代碼塊用空格區(qū)分開蛙紫。
  4. 減少不必要的空行或注釋分散注意力拍屑。
  5. 團(tuán)隊(duì)內(nèi)使用統(tǒng)一的IDEA格式器,避免代碼風(fēng)格不一致坑傅。

對象和數(shù)據(jù)結(jié)構(gòu)

  1. 對象暴露行為僵驰,隱藏?cái)?shù)據(jù)(Service類)。數(shù)據(jù)結(jié)構(gòu)暴露數(shù)據(jù)蒜茴,沒有明顯的行為(DTO類).

  2. 遵守德墨忒爾律,模塊不應(yīng)該了解它所操作對象的內(nèi)部情形浆西。
    比如這樣的代碼:

final String  outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath()

可以修改為:

Options opts = ctxt.getOptions();
File scratchFile = opts.getScratchDir();
final String outputDir = scratchFile.getAbsolutePath();

這樣的代碼依然不好粉私,只是要獲取outputDir而已,為什么這個函數(shù)要關(guān)心Options和File對象近零?
所以更好的實(shí)現(xiàn)方式是,把獲取outputDir的實(shí)現(xiàn)交給ctxt封裝起來秒赤。

String outputDir =  ctxt.getOutputDir();

錯誤處理

  1. 使用異常而不是返回碼,可以避免很多冗余的檢查憎瘸。

  2. 避免使用可控異常入篮,這違反了開閉原則,當(dāng)?shù)讓訉?shí)現(xiàn)新增一種異常的時候幌甘,上層代碼也要跟著一起修改。

publc String getSomething throws NullPointException(){};
  1. 給出異常的上下文環(huán)境锅风,否則拋出的異常沒有任何意義酥诽。

  2. 依照需要定義異常代理類。通過代理類來處理各種異常情況皱埠。

  3. 定義常規(guī)流程肮帐,使用策略模式來處理異常情況。

  4. 別返回null值训枢,使用空的對象或容器來代替,避免if判斷和空指針異常忘巧。

邊界

  1. 封裝對于第三方接口和類的調(diào)用恒界,這樣就把可能的改動限制在封裝對象內(nèi)部,避免第三方接口的修改對自身系統(tǒng)帶來的過分影響砚嘴。

  2. 或者可以使用Adapter模式涩拙,將我們的接口轉(zhuǎn)換為第三方提供的接口,這樣也實(shí)現(xiàn)了對第三方接口的包裝耸采。

  1. 類應(yīng)該短小兴泥,體現(xiàn)出來就是一個類應(yīng)該只有一個權(quán)責(zé),當(dāng)你發(fā)現(xiàn)無法準(zhǔn)確定義一個類的name時洋幻,就該拆分這個類了郁轻。

  2. 單一權(quán)責(zé)原則認(rèn)為文留,一個類有且只有一條修改的理由好唯。

  3. 什么是高內(nèi)聚?一個類內(nèi)部應(yīng)該只有少數(shù)變量骑篙,這些變量在所有函數(shù)中都被使用到。保持高內(nèi)聚就會得到很多短小的類森书。

  4. 面向修改編程靶端,將系統(tǒng)的修改設(shè)計(jì)為新增擴(kuò)展類(開閉原則)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凛膏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猖毫,更是在濱河造成了極大的恐慌台谍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吁断,死亡現(xiàn)場離奇詭異趁蕊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掷伙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來又兵,“玉大人任柜,你說我怎么就攤上這事∨娉” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵俄烁,是天一觀的道長绸栅。 經(jīng)常有香客問我,道長页屠,這世上最難降的妖魔是什么粹胯? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮风纠,結(jié)果婚禮上况鸣,老公的妹妹穿的比我還像新娘。我一直安慰自己竹观,他們只是感情好镐捧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懂酱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪誊抛。 梳的紋絲不亂的頭發(fā)上列牺,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音拗窃,去河邊找鬼瞎领。 笑死随夸,一個胖子當(dāng)著我的面吹牛九默,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驼修,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伍俘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勉躺,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤癌瘾,失蹤者是張志新(化名)和其女友劉穎饵溅,沒想到半個月后妨退,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜕企,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粗截,死狀恐怖广恢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情国拇,我是刑警寧澤捅位,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布腔召,位于F島的核電站杆查,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏臀蛛。R本人自食惡果不足惜亲桦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一浊仆、第九天 我趴在偏房一處隱蔽的房頂上張望客峭。 院中可真熱鬧,春花似錦氧卧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闪檬,卻和暖如春星著,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粗悯。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留样傍,地道東北人横缔。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像衫哥,于是被迫代替她去往敵國和親茎刚。 傳聞我的和親對象是個殘疾皇子撤逢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法膛锭,類相關(guān)的語法,內(nèi)部類的語法蚊荣,繼承相關(guān)的語法,異常的語法互例,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理奢入,服務(wù)發(fā)現(xiàn),斷路器媳叨,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評論 0 4
  • 一:新建項(xiàng)目導(dǎo)入第三方庫 二:點(diǎn)擊Link Binary With Libraries的“+”. 三:為GData...
    OSong閱讀 275評論 0 0
  • 山長水遠(yuǎn)丁存,不期來日只待今朝。 所思所想所念 一愿家人長健 二愿和合美滿 三愿能得長相伴 歲歲得安
    意莫安閱讀 642評論 0 0