CleanCode系列:不要"查找" 而是 直接 "要"

視頻來源:不要查找需要的東西

概述:

    不要問中間人查找或者索要需要的東西,而是直接要需要的東西(迪米特原則)

啟發(fā):

    高質(zhì)量的可測試的code來自創(chuàng)建過程和業(yè)務(wù)邏輯的分離。

將對象的創(chuàng)建過程和 業(yè)務(wù)邏輯分開有利于寫出干凈的代碼:業(yè)務(wù)主邏輯清晰,而不是一堆新對象的創(chuàng)建過程和if else邏輯混合在一起。

  1. 我們可以使用建造者模式:factory,builder,provider等將對象的創(chuàng)建過程和業(yè)務(wù)邏輯分離開。

  2. 使用DI 依賴注入的方式向需要測試的模塊注入直接依賴,這樣在測試的時候就可以mock數(shù)據(jù),也同時直接聚焦在主邏輯上寫出可讀性很好的代碼,提高代碼質(zhì)量。

注意:在對象的初始化的時候盡量不要Null check,因為這會增加創(chuàng)建對象的困難,因為有時候確實需要傳入Null參數(shù),或者dummy來進行測試,如果參數(shù)不能為Null就意味著不許創(chuàng)建這個對象,而這些參數(shù)對象可能對于本次測試來說并沒有意義,但是卻因為Null check導致不能構(gòu)造測試,這樣會很讓人痛苦。

依賴注入時的生命周期問題:

構(gòu)造函數(shù)創(chuàng)建方式依賴注入:通常注入的參數(shù)對象的生命周期等于或者大于被注入方,這樣不會內(nèi)存泄露——因為被注入方被銷毀的時候?qū)τ?注入的參數(shù)生命周期沒有影響,注入的參數(shù)對象被銷毀的時候,被注入方可能早就已經(jīng)銷毀了

方法參數(shù)類型注入:在運行時注入,通常注入的對象的生命周期比被注入方法所屬對象生命周期短,這樣方法運行完畢,參數(shù)對象可以被及時的垃圾回收,而不是長期被持有,導致長期占用內(nèi)存。

反模式(通過中間人來查找信息):

  • registry
  • Locator
  • Context
  • Manager
  • Handler
  • Environment
  • Pricinple
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、springmvc用到的注解,作用是什么,原理。 @Controller注解 是在Spring的org.spr...
    小王學java閱讀 742評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,899評論 18 399
  • 1. 面向?qū)ο筇卣?抽象:抽象是將一類對象的共同特征總結(jié)出來構(gòu)造類的過程,包括數(shù)據(jù)抽象和行為抽象兩方面。抽象只關(guān)注...
    十六郎閱讀 267評論 0 1
  • 轉(zhuǎn):http://www.cnblogs.com/java1024/ 各大公司Java后端開發(fā)面試題總結(jié) Thre...
    huangxiongbiao閱讀 359評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,900評論 28 54

友情鏈接更多精彩內(nèi)容