成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于Java健壯性的一些思考與實踐

開發 開發工具
程序健壯性非常重要,要怎么玩怎么寫才能讓程序更加魯棒呢?我又這么幾點小建議。

 程序健壯性非常重要,要怎么玩怎么寫才能讓程序更加魯棒呢?我又這么幾點小建議。

一、進行統一的業務處理響應

根據螞蟻金服開放平臺的標準返回,一個 response 至少應當有4個返回值。

1、isSuccess  調用是否成功

2、data           返回的響應數據

3、errorCode  錯誤碼

4、errorMsg    錯誤信息

這就要求我們的接口要有標準的統一的 response ,那怎么實現呢?

1、Spring 切面, JDK 動態代理,Cglib 動態代理等用代理類實現

2、匿名子類,使用一個公共的 Executor 來負責處理所有的請求。

上面兩種模式都可以實現標準的 response 的封裝,那么具體要封裝哪些東西呢?其實最主要的就是統一的 try catch,防止出現任何的 500 錯誤給到調用方。

------ 為什么要在最外層去完成呢?------

因為 500 錯誤對于調用方來說是致命而且是毫無價值的,無論調用方是前端還是其他的業務系統

------ 設定統一的錯誤碼 ------

參數錯誤           PARAMETER_ERROR

數據庫錯誤       DATABASE_ERROR

外部系統錯誤   OUTER_SYSTEM_ERROR

如果有了上面的這些錯誤碼以及錯誤信息,業務方至少可以告知用戶究竟發生了什么事,也可以設定一些列的告警以及自動化運維的方式來處理這些錯誤。

二、參數檢查

在進行真正的邏輯處理前,應當對入參進行一系列的校驗,以保持后續業務處理邏輯的輕量,這也是 fast fail 思想的指導,有錯誤盡早結束處理。

具體是怎樣的呢?我們假設參數為 m.

  1. if( null == m ){return ;} 

進行空判斷,防止后續滴啊用m發生 NullPointerException,但這里也不建議拋出NPE,因為看到日志也會很迷惑。

  1. if( StringUtils.isEmpty( m ) ){return ;} 

字符串是否為空串

  1. if( CollectionUtils.isEmpty.isEmpty( m ) ){return ;} 

集合是否為空或者null

  1. try{ 
  2.     JSON.parseObject( m ); 
  3.     return true
  4. catch(JSONExceptin e){ 
  5.     return false

判斷字符串是否為 JSON 格式

三、重試機制

對于特定的外部系統錯誤,可以嘗試多次重試這種策略,當然這也是簡歷在對方的服務是冪等的前提下。這樣做在某些網絡不穩定的情況下可以提高響應成功率。

四、冪等機制

什么叫冪等?意思就是  無論何時何處何人,只要是先攻的請求,就應當有相同的響應,直到到達終態。

這個原則并不關注上一次的執行結果,企鵝本次結果不應當因為上一次請求的部分成功或者失敗而導致某些中間狀態不一致導致請求失敗。

五、Lambda

  1. Optionl.of( target ) 
  2.             .getOrElse( new ArrayList() ) 
  3.             .filter( Object::NotNull) 
  4.             .forEach( () -> {} ) 

這種寫法可以確保絕大部分的異常不出現,特別是在對于集合進行處理的時候,因為集合中只要有其中一個值是會導致程序失敗的,整個程序都會報錯。這樣寫因為對數據做了比較多的檢查和兼容,所以出現錯誤的概率會比較低,但也會有一個弊端,就是當這樣的程序都出現異常的時候,開發者一般不知從何查起,要定位出是哪行數據就已經很費勁了。

【本文為51CTO專欄作者“大蕉”的原創稿件,轉載請通過作者微信公眾號“一名叫大蕉的程序員”獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2024-12-27 10:51:53

2017-05-02 21:08:35

開發架構工程師

2017-12-21 07:54:07

2021-06-10 10:02:19

優化緩存性能

2021-02-06 14:25:29

Java延遲加載代碼

2017-02-05 15:10:55

Option函數式編程代碼

2012-12-19 09:36:49

測試自動化測試

2020-08-20 10:16:56

Golang錯誤處理數據

2021-05-27 08:15:05

CSS CSS prefer技巧

2009-06-25 09:50:32

JSF

2020-02-03 16:03:36

疫情思考

2025-02-13 00:28:26

2015-10-12 08:59:57

異步代碼測試

2021-06-10 20:17:04

云網融合超融合

2021-08-08 10:44:33

安卓系統開發者手機廠商

2021-06-15 07:10:14

JavaScript異步編程

2009-08-27 10:06:15

Scala的構造方法

2009-06-18 09:51:25

Java繼承

2023-11-17 11:55:54

Pythonretrying庫

2012-09-25 10:03:56

JavaJava封面Java開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久一区 | 欧美视频在线看 | 欧美一级淫片007 | 日本激情视频在线播放 | 久久国产精品-久久精品 | 波多野结衣二区 | 丁香一区二区 | 久久久久久亚洲精品 | av在线天堂 | 亚洲黄色片免费观看 | 成人在线免费视频观看 | 久久一区二区三区免费 | 男人天堂网站 | 波多野结衣av中文字幕 | 精品久久视频 | 日日骚av | 一级片免费网站 | 亚洲日韩中文字幕一区 | 午夜精品一区二区三区在线观看 | 国产精品天堂 | 国产精品a久久久久 | 日韩精品一区二区三区中文在线 | 久久999 | 亚洲色图婷婷 | 日韩三级电影在线看 | 国产精品揄拍一区二区久久国内亚洲精 | 久久精品免费 | 欧美手机在线 | 久久99精品久久久久婷婷 | 日韩五月天 | 色婷婷精品国产一区二区三区 | 久久亚洲国产精品 | 免费黄色在线观看 | 欧美中文字幕一区二区三区 | 一级网站| 国产精品久久久久一区二区三区 | 亚洲国产精品一区二区第一页 | 黄网站涩免费蜜桃网站 | 一a级片| 欧美精品v | 337p日本欧洲亚洲大胆鲁鲁 |