實戰(zhàn)篇-設(shè)計類實戰(zhàn)

# Java接口Result設(shè)計

方法簽名
User getUserById(Long userId) throws BizException;

- 返回值User:方法的輸出,方法的功能執(zhí)行結(jié)果的準(zhǔn)確表達,不應(yīng)該有超出這個語義的東西存在。
- 異常BizException: 方法意外出現(xiàn)的錯誤,指超出這個方法之外的部分。

##?什么是意外-系統(tǒng)異常
意外指我們無法預(yù)知的,非正常情況,比如網(wǎng)絡(luò)超時,DB異常,Bug等,調(diào)用方一般不太可能基于這些錯誤做不同的業(yè)務(wù)邏輯處理,調(diào)用不能通過調(diào)整參數(shù)繼續(xù)處理。常用于日志和監(jiān)控,方便定位排查。
結(jié)論:系統(tǒng)異常,通過異常返回

## 什么是失敗-業(yè)務(wù)失敗
失敗指業(yè)務(wù)規(guī)則攔截導(dǎo)致的失敗,比如密碼錯誤,權(quán)限不足,余額不足。調(diào)用方可以根據(jù)不同的失敗狀態(tài),完成不同的業(yè)務(wù)邏輯。
結(jié)論:業(yè)務(wù)失敗,通過返回值返回

##?判斷標(biāo)準(zhǔn)是什么
如果一個錯誤,調(diào)用方只能通過人工介入的方式才能恢復(fù),比如修改代碼,該配置,則必然屬于異常;
如果調(diào)用方無法使用代碼邏輯來處理錯誤而自動恢復(fù),而是只能通過重試的方式,依賴下游的恢復(fù)才能恢復(fù),則屬于異常

##?接口返回設(shè)計建議
1. 對響應(yīng)合理分類

普通讀接口,建議直接用領(lǐng)域?qū)ο笞鳛榉祷刂?,有特殊業(yè)務(wù)規(guī)則的除外
普通寫接口,建議使用Result作為返回值,避免直接包裝原生類型,避免所有的錯誤定義在一個類中

2. 對異常的處理
> 處理位置:
原始位置catch,記錄日志,記錄出入?yún)ⅲD(zhuǎn)化為本應(yīng)用異常,上拋;
應(yīng)用頂層catch,打印統(tǒng)一日志,打印堆棧,返回統(tǒng)一結(jié)果
中間層,不catch

> 處理方式:
系統(tǒng)異常直接拋出異常
參數(shù)錯誤,一般可以使用assert來保證正確。即我們的后續(xù)邏輯認(rèn)為,當(dāng)前的參數(shù)是不可能錯誤的,我么沒必要為此寫過多繁瑣的防御性代碼
系統(tǒng)異常并非一定是異常,我們可以轉(zhuǎn)化成一個業(yè)務(wù)結(jié)果,比如網(wǎng)絡(luò)異常無法獲取結(jié)果,我們需要轉(zhuǎn)化為未知狀態(tài),通過查詢結(jié)果獲取最終結(jié)果


The Complete Works of Tao Technology 2021

?著作權(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)容

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