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

AgileBoot?項(xiàng)目?jī)?nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析

 更新時(shí)間:2022年10月20日 16:23:53   作者:CoderV的進(jìn)階筆記  
這篇文章主要為大家介紹了AgileBoot?項(xiàng)目?jī)?nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

本篇文章主要探討關(guān)于統(tǒng)一錯(cuò)誤碼的設(shè)計(jì),并提供筆者的實(shí)現(xiàn)

歡迎大家討論,指正。

該錯(cuò)誤碼的設(shè)計(jì)在倉(cāng)庫(kù):

github:github.com/valarchie/A…

gitee:gitee.com/valarchie/A…

統(tǒng)一的錯(cuò)誤碼管理的優(yōu)點(diǎn)

  • 統(tǒng)一的錯(cuò)誤碼描述,如果沒有統(tǒng)一的錯(cuò)誤碼的話,錯(cuò)誤描述散落在項(xiàng)目?jī)?nèi)的不同地方,同一個(gè)錯(cuò)誤碼卻產(chǎn)生不同的錯(cuò)誤描述,會(huì)導(dǎo)致歧義。
  • 錯(cuò)誤碼的層級(jí),在與客戶端的交互過程中,我們可能需要根據(jù)錯(cuò)誤的層級(jí),來做不同的顯示。例如系統(tǒng)內(nèi)部的錯(cuò)誤,我們產(chǎn)生紅色的警告框。業(yè)務(wù)上操作類型的錯(cuò)誤(例如用戶名不能超過64位),我們 則以正常的黃色提示框來提醒用戶。
  • i18n的處理。統(tǒng)一的錯(cuò)誤碼管理,才使得國(guó)際化更好實(shí)現(xiàn)。我們可以給每一種錯(cuò)誤碼定義唯一的key,來找到對(duì)應(yīng)不同語(yǔ)言的錯(cuò)誤描述。
  • 集中的錯(cuò)誤碼管理便于形成文檔供調(diào)用者參考。例如我們提供接口給其他團(tuán)隊(duì)調(diào)用,可以提供給他們?cè)敿?xì)的錯(cuò)誤碼列表。

無(wú)錯(cuò)誤碼設(shè)計(jì)的缺陷

Ruoyi項(xiàng)目

  • 錯(cuò)誤描述散落在項(xiàng)目的各個(gè)地方,一旦有改變錯(cuò)誤描述的需求,要滿項(xiàng)目去尋找關(guān)聯(lián)的錯(cuò)誤描述,然后逐一修改。這種情形很容易造成疏漏。
  • 如果需要翻譯的話,這種隨意的字符串形式也很難去做國(guó)際化翻譯。
  • 沒有準(zhǔn)確的錯(cuò)誤碼,在一些情形下,調(diào)用方需要根據(jù)你返回的錯(cuò)誤碼進(jìn)行不同的處理。如果沒有準(zhǔn)確的錯(cuò)誤碼,僅憑錯(cuò)誤描述,比較難以實(shí)現(xiàn)。

錯(cuò)誤碼的層級(jí)

錯(cuò)誤碼的層級(jí)有助于客戶端對(duì)于不同級(jí)別的錯(cuò)誤進(jìn)行處理。比如有的錯(cuò)誤進(jìn)行隱藏,有的錯(cuò)誤直接暴露給用戶。這邊我規(guī)劃了四層錯(cuò)誤碼。 錯(cuò)誤碼集合

  • 1~9999 為保留錯(cuò)誤碼 或者 常用錯(cuò)誤碼
  • 10000~19999 為內(nèi)部錯(cuò)誤碼
  • 20000~29999 客戶端錯(cuò)誤碼 (客戶端異常調(diào)用之類的錯(cuò)誤)
  • 30000~39999 為第三方錯(cuò)誤碼 (代碼正常,但是第三方異常)
  • 40000~49999 為業(yè)務(wù)邏輯 錯(cuò)誤碼 (無(wú)異常,代碼正常流轉(zhuǎn),并返回提示給用戶)

錯(cuò)誤碼的模塊

為了更好的分門別類,筆者給錯(cuò)誤碼設(shè)定了模塊,便于客戶端的特殊處理。例如客戶端可以專門給某一個(gè)模塊的錯(cuò)誤進(jìn)行一個(gè)統(tǒng)一的處理。 模塊對(duì)應(yīng)的數(shù)字在千位和百位。例如1XX01,XX代表了模塊的意義。

/**
 * 系統(tǒng)內(nèi)的模塊
 */
public enum Module {
    /**
     * 普通模塊
     */
    COMMON(0),
    /**
     * 權(quán)限模塊
     */
    PERMISSION(1),
    /**
     * 登錄模塊
     */
    LOGIN(2),
    /**
     * 數(shù)據(jù)庫(kù)模塊
     */
    DB(3),
    /**
     * 上傳
     */
    UPLOAD(4),
    /**
     * 用戶
     */
    USER(5),
    /**
     * 配置
     */
    CONFIG(6),
    /**
     * 職位
     */
    POST(7),
    ;
    private final int code;
    Module(int code) { this.code = code * 100; }
    public int code() {return code; }
}

錯(cuò)誤碼代碼例子

/**
     * 10000~19999是內(nèi)部錯(cuò)誤碼  例如 框架有問題之類的
     */
    public enum Internal implements ErrorCodeInterface {
        /**
         * 內(nèi)部錯(cuò)誤碼
         */
        INVALID_PARAMETER(Module.COMMON, 1, "參數(shù)異常"),
        UNKNOWN_ERROR(Module.COMMON, 2, "未知異常, 請(qǐng)查看系統(tǒng)日志"),
        GET_ENUM_FAILED(Module.COMMON, 3, "獲取枚舉類型失敗, 枚舉類: {}"),
        GET_CACHE_FAILED(Module.COMMON, 4, "獲取緩存失敗"),
        LOGIN_CAPTCHA_GENERATE_FAIL(Module.LOGIN, 1, "驗(yàn)證碼生成失敗"),
        INVALID_TOKEN(Module.PERMISSION, 1, "token異常"),
        DB_INTERNAL_ERROR(Module.DB, 1, "數(shù)據(jù)庫(kù)異常: {}"),
        ;
        private final int code;
        private final String msg;
        private static final int BASE_CODE = 10000;
        Internal(Module module, int code, String msg) {
            this.code = BASE_CODE + module.code() + code;
            this.msg = msg;
        }
        @Override
        public int code() {
            return this.code;
        }
        @Override
        public String message() {
            return this.msg;
        }
    }

錯(cuò)誤碼的使用

為了便于錯(cuò)誤碼在編寫代碼時(shí)方便使用,我創(chuàng)建了ErrorCode這個(gè)類,并將四個(gè)層級(jí)的錯(cuò)誤類一并放進(jìn)這個(gè)類當(dāng)中。

代碼中的例子

 if (roleService.checkRoleNameUnique(getRoleId(), getRoleName())) {
            throw new ApiException(ErrorCode.Business.ROLE_NAME_IS_NOT_UNIQUE, getRoleName());
 }

通過這樣的形式進(jìn)行調(diào)用:ErrorCode.Business.ROLE_NAME_IS_NOT_UNIQUE

該錯(cuò)誤碼的設(shè)計(jì)缺陷

缺陷在于:

  • 一個(gè)模塊內(nèi)的錯(cuò)誤碼上線是100個(gè)。 解決該問題的話,有兩種形式。一是:盡量設(shè)計(jì)比較通用的錯(cuò)誤碼,粒度過細(xì)會(huì)導(dǎo)致錯(cuò)誤碼不夠用。二是:使用重復(fù)的模塊,比如原來User模塊,再起一個(gè)User2模塊。

探討關(guān)于錯(cuò)誤碼的設(shè)計(jì),歡迎小伙伴留言評(píng)論指正。

Any corrections or suggestions are appreciated.

Agileboot是一個(gè)致力于規(guī)范、質(zhì)量,健壯的前后端開發(fā)腳手架。

以上就是AgileBoot 項(xiàng)目?jī)?nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析的詳細(xì)內(nèi)容,更多關(guān)于AgileBoot 項(xiàng)目?jī)?nèi)統(tǒng)一錯(cuò)誤碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決MyBatisPlus的updateBatchById()批量修改失效問題

    解決MyBatisPlus的updateBatchById()批量修改失效問題

    這篇文章主要介紹了解決MyBatisPlus的updateBatchById()批量修改失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java poi sax方式處理大數(shù)據(jù)量excel文件

    java poi sax方式處理大數(shù)據(jù)量excel文件

    這篇文章主要介紹了java poi sax方式處理大數(shù)據(jù)量excel文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Java和C#下的參數(shù)驗(yàn)證方法

    Java和C#下的參數(shù)驗(yàn)證方法

    下面小編就為大家?guī)硪黄狫ava和C#下的參數(shù)驗(yàn)證實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • java反射之獲取類的信息方法(推薦)

    java反射之獲取類的信息方法(推薦)

    下面小編就為大家?guī)硪黄猨ava反射之獲取類的信息方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解使用批處理方式配置Java環(huán)境

    詳解使用批處理方式配置Java環(huán)境

    這篇文章主要介紹了詳解使用批處理方式配置Java環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • RocketMQ消息積壓原因及處理方法

    RocketMQ消息積壓原因及處理方法

    RocketMQ是一種可靠的、可擴(kuò)展的消息中間件,廣泛應(yīng)用于分布式系統(tǒng)中的消息通信,然而,在高并發(fā)的場(chǎng)景下,由于消息產(chǎn)生速度超過消費(fèi)速度,可能會(huì)導(dǎo)致消息積壓的問題,本文將介紹RocketMQ消息積壓的原因和如何處理積壓?jiǎn)栴}
    2023-06-06
  • Java設(shè)計(jì)模式之代理模式與裝飾模式實(shí)例詳解

    Java設(shè)計(jì)模式之代理模式與裝飾模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之代理模式與裝飾模式,結(jié)合具體實(shí)例形式分析了代理模式與裝飾模式的概念、功能、java實(shí)現(xiàn)方法與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Java線程池ThreadPoolExecutor源碼深入分析

    Java線程池ThreadPoolExecutor源碼深入分析

    ThreadPoolExecutor作為java.util.concurrent包對(duì)外提供基礎(chǔ)實(shí)現(xiàn),以內(nèi)部線程池的形式對(duì)外提供管理任務(wù)執(zhí)行,線程調(diào)度,線程池管理等等服務(wù)
    2022-08-08
  • 詳解Java的Hibernate框架中的搜索工具的運(yùn)用

    詳解Java的Hibernate框架中的搜索工具的運(yùn)用

    這篇文章主要介紹了詳解Java的Hibernate框架中的搜索工具的運(yùn)用,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • InvocationHandler中invoke()方法的調(diào)用問題分析

    InvocationHandler中invoke()方法的調(diào)用問題分析

    這篇文章主要介紹了InvocationHandler中invoke()方法的調(diào)用問題分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論

柳州市| 通州区| 锦州市| 东阳市| 曲周县| 云霄县| 福贡县| 绥芬河市| 石屏县| 林芝县| 布尔津县| 武威市| 长治县| 桦川县| 广饶县| 兰溪市| 康平县| 曲松县| 高碑店市| 静安区| 彭水| 彰化县| 临潭县| 长垣县| 余江县| 囊谦县| 九龙城区| 库车县| 大城县| 黄大仙区| 莆田市| 台东县| 沅陵县| 景德镇市| 登封市| 阿克苏市| 社旗县| 祁门县| 柏乡县| 江城| 明溪县|