最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

 更新時間:2023年09月21日 09:40:10   作者:GuangHui  
這篇文章主要為大家介紹了java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一. 命名

1.1 命名是否具有業(yè)務(wù)含義

(1) 命名不精準(zhǔn),用詞寬泛,不能有效反應(yīng)代碼含義

從溝通的角度看,這就不是一個有效的溝通。要想理解它,需要消耗大量的認(rèn)知成本,時間和精力,同樣也增加了后來人包括我們自己維護代碼的成本。

其中,Info、data、flag、process、handler、build、maintain、manager、modify等,都是屬于典型的過于寬泛的名字,當(dāng)這些名字出現(xiàn)的地方,多半都是寫代碼的人當(dāng)時沒有想好用什么名字。

命名要能夠描述出這段代碼在做的事情,好的名字應(yīng)該描述意圖,而非細(xì)節(jié)。

命名演化示例:

processChapter:處理章節(jié),命名寬泛

changeChapterToTranlsating:將章節(jié)修改為翻譯中  在描述細(xì)節(jié)

startTranslation:開始翻譯,描述意圖

(2) 用技術(shù)術(shù)語命名

xxxList,xxxMap,xxxSet

這是一種不費腦子的命名方式,因為它是一種基于實現(xiàn)細(xì)節(jié)的命名方式。
重要原則:面向接口編程,不要面向?qū)崿F(xiàn)編程。因為接口是穩(wěn)定的,而實現(xiàn)是易變的。

正確示例:

bookList -> books
xxxMap -> xxxMaping

實際上,在實際的代碼中,技術(shù)術(shù)語的出現(xiàn),往往代表著缺少了一個應(yīng)有的模型。

比如在業(yè)務(wù)代碼中直接出現(xiàn)了redis,通常來說,我們真正需要的只是一個緩存,而redis只是緩存這個模型的一個實現(xiàn)而已。

而再進(jìn)一步,緩存這個概念也是一種技術(shù)術(shù)語,從某種意義上,它也不應(yīng)該出現(xiàn)在業(yè)務(wù)代碼中。Spring就做的比較好,需要緩存,就加上@Cacheable的注解。

注意,在技術(shù)類項目中,存在技術(shù)術(shù)語即是業(yè)務(wù)語言的情況;但對于業(yè)務(wù)項目,這個說法就必須重新審視。

(3) 用業(yè)務(wù)語音寫代碼

編寫可維護的代碼,要使用業(yè)務(wù)語音,而怎么知道自己的命名是否用的是業(yè)務(wù)語音呢,就是把這個詞講給產(chǎn)品經(jīng)理,看他是否知道。

一個好的做法:在團隊建立自己的業(yè)務(wù)語言詞匯表。

approveChapter(long chapterId,long userId)
-> approveChapter(long chapterId,long reviewerId)

(4) 小結(jié)

  • 壞味道:不精準(zhǔn)的命名,用技術(shù)術(shù)語命名。
  • 解決之道:好的命名要體現(xiàn)代碼在做什么,但無需展示代碼的細(xì)節(jié),更進(jìn)一步,要準(zhǔn)確體現(xiàn)意圖,而不是實現(xiàn)細(xì)節(jié),更高的要求是,用業(yè)務(wù)語言寫代碼。
  • 原則:描述意圖,而非細(xì)節(jié);面向接口編程,接口是穩(wěn)定的,實現(xiàn)是易變的;命名出現(xiàn)技術(shù)名詞,往往是缺少了一個模型;使用業(yè)務(wù)語音。

1.2 命名是否符合英語語法

(1)違反語法規(guī)則命名

完成翻譯,方法名:completedTranslate 不是有效的動賓結(jié)構(gòu) ->completeTranslation
重新翻譯,方法名:retranslation 應(yīng)該是一個動詞 -> retranslate

常見的命名規(guī)則:類名是一個名詞,表示一個對象;方法名是一個動詞,或是動賓短語,表示一個動作。

(2)不準(zhǔn)確的英語詞匯

審核:
audit:更官方,偏向?qū)徲?br />review

常用的做法就是把中文詞扔到字典網(wǎng)站從返回的眾多結(jié)果中找到一個自己看著順眼的。好一點的做法是根據(jù)google翻譯,然后根據(jù)二者的英文釋義進(jìn)行比較。

其實,在這種情況下,最好的解決方案就是建立一個業(yè)務(wù)詞匯表,而不是自己臆想。建立詞匯表的一個關(guān)鍵點是用集體智慧,而非個體智慧。另外,業(yè)務(wù)詞匯表也是屬于構(gòu)建團隊同樣語言的一部分成果。

(3)英語單詞拼寫錯誤

一個好的解決方案,借助工具插件檢查拼寫錯誤。

(4)小結(jié)

  • 壞味道:命名違反語法規(guī)則,用詞不準(zhǔn)確,單詞拼寫錯誤。更低級的一些,使用拼音,使用不恰當(dāng)?shù)膯卧~簡寫。(如果非要用縮寫,可以用一些行業(yè)通用的縮寫,而最好不要自己創(chuàng)造,前提是一定要約定好)
  • 解決之道:制定代碼規(guī)范,比如類名用名詞,函數(shù)名用動詞或動賓短語;建立團隊詞匯表;經(jīng)常進(jìn)行代碼評審。
    -小工具:命名插件codelf。

二. 重復(fù)代碼

重復(fù)代碼產(chǎn)生的一些常見原因:

  • 代碼結(jié)構(gòu)不合理導(dǎo)致同一個實現(xiàn)散落各處。由于初期代碼結(jié)構(gòu)設(shè)計不合理導(dǎo)致后續(xù)功能實現(xiàn)無法快速找到已有實現(xiàn),或者找到了但是不好引用已有實現(xiàn)。改進(jìn):初期設(shè)計代碼邏輯合理,對于不合理的地方要及時重構(gòu) 防止演變成原因2。
  • 為了穩(wěn)定性,不動老邏輯,拷貝一份。由于對于業(yè)務(wù)的不熟悉和對自己代碼能力的不信任,不敢重構(gòu)導(dǎo)致。改進(jìn):通過微重構(gòu)進(jìn)行多次迭代小改進(jìn)慢慢優(yōu)化。
  • 寫的時候為了快,由于時間緊張或者能力問題,無法識別出的壞代碼。改進(jìn):提升能力。

復(fù)制粘貼的代碼

結(jié)構(gòu)重復(fù)的代碼

示例如下:

@Task
public void sendBook() {
    try {
        this.service.sendBook();
    } catch (Throwable t) {
        this.notification.send(new SendFailure(t)));
        throw t;
    }
}
@Task
public void sendChapter() {
    try {
        this.service.sendChapter();
    } catch (Throwable t) {
        this.notification.send(new SendFailure(t)));
        throw t;
    }
}

優(yōu)化之后:

@Task
public void sendChapter() {
    executeTask(this.service::sendChapter);
}
@Task
public void sendBook() {
    executeTask(this.service::sendBook);
}
private void executeTask(final Runnable runnable) {
    try {
        runnable.run();
    } catch (Throwable t) {
        this.notification.send(new SendFailure(t)));
        throw t;
    }
}

對于支持函數(shù)式編程的程序設(shè)計語言來說,可以用語言提供的便利寫法簡化代碼的編寫,就像上面的代碼就是用了 Java 里的方法引用(Method Reference)。

if 和 else 代碼塊中的語句高度類似

只要你看到 if 語句出現(xiàn),而且 if 和 else 的代碼塊長得又比較像,多半就是出現(xiàn)了這個壞味道。

if (user.isEditor()) {
    service.editChapter(chapterId, title, content, true);
} else {
    service.editChapter(chapterId, title, content, false);
}

優(yōu)化之后:

service.editChapter(chapterId, title, content, user.isEditor());

小結(jié)

  • 壞味道:重復(fù)的代碼,重復(fù)的結(jié)構(gòu),if 和 else 代碼塊中的語句高度類似
  • 解決之道:不要使用復(fù)制粘貼;先提取函數(shù),然后在需要的地方調(diào)用這個函數(shù)。

以上就是java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java命名代碼規(guī)范的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換

    詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換

    這篇文章主要介紹了詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java實現(xiàn)字符編碼轉(zhuǎn)換(utf-8/gbk)

    Java實現(xiàn)字符編碼轉(zhuǎn)換(utf-8/gbk)

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)字符編碼轉(zhuǎn)換工具,主要針對UTF-8和GBK兩種編碼格式,文中的示例代碼講解詳,需要的可以了解下
    2025-03-03
  • springboot實現(xiàn)異步任務(wù)

    springboot實現(xiàn)異步任務(wù)

    這篇文章主要為大家詳細(xì)介紹了springboot實現(xiàn)異步任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Mybatis動態(tài)Sql標(biāo)簽使用小結(jié)

    Mybatis動態(tài)Sql標(biāo)簽使用小結(jié)

    本文主要介紹了Mybatis動態(tài)Sql標(biāo)簽使用,常用的動態(tài)sql標(biāo)簽包括?if、choose(when、otherwise)、trim(where、set)、foreach,下面就來介紹一下
    2024-04-04
  • 淺談JAVA 責(zé)任鏈模式

    淺談JAVA 責(zé)任鏈模式

    這篇文章主要介紹了JAVA 責(zé)任鏈模式的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java時間相關(guān)處理小結(jié)

    java時間相關(guān)處理小結(jié)

    這篇文章介紹了java時間相關(guān)處理,有需要的朋友可以參考一下
    2013-11-11
  • JAVA | Guava EventBus 使用 發(fā)布/訂閱模式的步驟

    JAVA | Guava EventBus 使用 發(fā)布/訂閱模式的步驟

    這篇文章主要介紹了JAVA | Guava EventBus 使用 發(fā)布/訂閱模式的步驟,幫助大家更好的理解和學(xué)習(xí)使用Guava EventBus,感興趣的朋友可以了解下
    2021-03-03
  • Java實現(xiàn)讀取csv文件的兩種方式

    Java實現(xiàn)讀取csv文件的兩種方式

    這篇文章主要為大家詳細(xì)介紹了如何利用Java讀取csv文件的兩種方式,文中的示例代碼講解詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以了解一下
    2023-12-12
  • Java利用Spire.PDF for Java實現(xiàn)在PDF中添加或刪除數(shù)字簽名

    Java利用Spire.PDF for Java實現(xiàn)在PDF中添加或刪除數(shù)字簽名

    在數(shù)字化辦公日益普及的今天,PDF文檔的安全性與真實性變得尤為重要,本文將深入探討如何在Java環(huán)境中,利用強大的Spire.PDF for Java庫,對PDF文檔進(jìn)行數(shù)字簽名的添加與刪除操作,有需要的可以了解下
    2025-11-11
  • 深入理解Spring事務(wù)的傳播行為

    深入理解Spring事務(wù)的傳播行為

    Spring在TransactionDefinition接口中規(guī)定了7種類型的事務(wù)傳播行為。下面這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳播行為的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評論

林西县| 永平县| 静宁县| 辽源市| 武陟县| 高雄县| 三门县| 华容县| 苍南县| 衡阳县| 丹巴县| 永安市| 剑河县| 新巴尔虎右旗| 绵阳市| 鄂伦春自治旗| 宾川县| 德惠市| 霍山县| 综艺| 美姑县| 九江市| 新丰县| 泰和县| 宁陕县| 济阳县| 昌图县| 青州市| 团风县| 丰城市| 密云县| 耿马| 凤凰县| 普兰县| 仁怀市| 慈溪市| 永和县| 嘉鱼县| 津市市| 婺源县| 千阳县|