日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件接口设计中的版本兼容问题处理

發(fā)布時(shí)間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件接口设计中的版本兼容问题处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


? 最近在項(xiàng)目中經(jīng)常遇到軟件版本升級(jí)后不兼容舊版本的問題,本文根據(jù)以往經(jīng)驗(yàn),從軟件接口設(shè)計(jì)、實(shí)現(xiàn)等方面整理了一些兼容性設(shè)計(jì)思路。

1. 優(yōu)化設(shè)計(jì)

1)接口返回值的定義

有的人喜歡用0、1等較小的數(shù)字標(biāo)記返回碼或其他一些常量含義,比如我接觸過幾個(gè)項(xiàng)目,使用整型常量0作為成功的返回碼,在以后的使用中,可能遇到的問題是整型的缺省值為0,這種情況下邏輯上無法區(qū)分沒有返回值還是返回了0,如果某天出現(xiàn)了此類問題,也很隱蔽很難排查。一旦這些常量定義下來,想要修改的代價(jià)會(huì)非常大或無法修改。所以,在定義這些常量時(shí),要盡可能的考慮到各種可能的情況,不防將數(shù)字寬度放大點(diǎn),預(yù)留出擴(kuò)展空間。

2)版本號(hào)處理

初始設(shè)計(jì)時(shí),應(yīng)當(dāng)在消息中保留版本號(hào)字段。這樣一來,當(dāng)未來需要做出重大設(shè)計(jì)改變時(shí),還可以通過引入新的版本號(hào),來實(shí)現(xiàn)對(duì)舊版本的兼容。當(dāng)收到消息時(shí),首先通過版本號(hào)區(qū)分出消息的版本,按照版本號(hào)對(duì)應(yīng)的效果處理,從而實(shí)現(xiàn)兼容。

3)客戶端分類

服務(wù)端通常需要接收不同終端發(fā)過來的請(qǐng)求,如APP、微信、網(wǎng)頁端、cs客戶端等。設(shè)計(jì)者不得不考慮的問題是在初版本中功能、實(shí)現(xiàn)可能都完全一致,但是不能保證未來有些客戶端需要區(qū)別對(duì)待。

有些設(shè)計(jì)者會(huì)針對(duì)不同的客戶端同樣的功能分開處理、實(shí)現(xiàn)多次的設(shè)計(jì)方式,這種方式固然清晰,相互之間不影響,但帶來了代碼、工作量的冗余,初版本實(shí)現(xiàn)需要寫多份,升級(jí)修改時(shí)也需要修改多處,代碼維護(hù)效率低,程序員的時(shí)間是寶貴的,并且這種方式生成的成果物也是臃腫了很多。雖然如此,也比完全不考慮調(diào)用者差異性要進(jìn)步了很多。

這類問題,加上調(diào)用者的類型就能很快解決此問題了,如增加platForm參數(shù),定義常量如“weChat”、“app”、“web”、“cs”、“others”標(biāo)記就能輕松解決了,遇到需要區(qū)別對(duì)待的客戶端可能以最快的方式處理。

4)新增參數(shù)

在軟件開發(fā)時(shí),不可避免的會(huì)遇到新增接口參數(shù)等問題,如果在新版本的接口中暴力的增加了必填參數(shù),就需要所有調(diào)用此接口的老客戶端都需要重新改動(dòng),新舊版本完全不兼容。

對(duì)于新增參數(shù),設(shè)計(jì)者應(yīng)處理為舊版本非必填參數(shù),結(jié)合版本號(hào)在新版本可以設(shè)置為必填。而對(duì)于那些未設(shè)計(jì)版本號(hào)的接口,一定要非必填。

2. 優(yōu)化實(shí)現(xiàn)

1)新增參數(shù)

在軟件升級(jí)開發(fā)時(shí),不可避免的會(huì)遇到新增接口參數(shù)等問題,對(duì)于新增參數(shù),處理為非必填參數(shù),可適當(dāng)增加判空處理,必要時(shí)處理為缺省默認(rèn)值。

?

?

如采用json傳參,針對(duì)值獲取,有以下幾種異常情況需要注意(適用于java開發(fā)):

根據(jù)上述表格,不難總結(jié)出,判空使用json.get("param")最合適,故可參考如下代碼實(shí)現(xiàn):

if(StringUtils.isNotBlank(json.get("param"))) {

???????? param= json.get("param").toString();

????? }else{

???????? //默認(rèn)常量

???????? param= DEFAULT_PARAM;

????? }

2)參數(shù)類型發(fā)生變化

如果舊版本參數(shù)類型設(shè)計(jì)得不夠合理,或者隨著時(shí)間的推移,功能的升級(jí),需要改變參數(shù)類型時(shí),合適的代碼也是有辦法做到兼容的,比如:

人臉查詢或布控的相似度參數(shù),最初的設(shè)計(jì)者只要考慮到值范圍為80-90(相似度80%-90%之間,傳參最小相似度80,最大相似度90)這樣的情景,采用整型傳參,隨著算法升級(jí)、應(yīng)用場(chǎng)景更高要求等情況,出現(xiàn)80.5-90.5這樣的應(yīng)用需求,代碼可這樣處理,先轉(zhuǎn)字符串再轉(zhuǎn)換為需要的類型:

Double.parseDouble(json.get("similar").toString())

在版本升級(jí)時(shí)采用上面方式處理之后無論接口傳參為整型還是浮點(diǎn)型都能夠正常接收,實(shí)現(xiàn)版本兼容。

????3. 總結(jié)

? 本文總結(jié)了一些項(xiàng)目開發(fā)中的經(jīng)驗(yàn),提出的設(shè)計(jì)思路和實(shí)現(xiàn)方式都很簡(jiǎn)單,還有其它的設(shè)計(jì)思路、好的實(shí)現(xiàn)方式有待補(bǔ)充。謀事在人,關(guān)鍵在于設(shè)計(jì)者和開發(fā)實(shí)現(xiàn)者考慮問題的全面性。

? 優(yōu)秀的軟件設(shè)計(jì)會(huì)放遠(yuǎn)目光,考慮到未來的發(fā)展方向,預(yù)留擴(kuò)展空間;優(yōu)秀的代碼是基石,就像建房子,設(shè)計(jì)稿畫得再漂亮,材料劣質(zhì),也是白白耽誤了設(shè)計(jì)成本。二者結(jié)合,高質(zhì)量的設(shè)計(jì),高質(zhì)量的實(shí)現(xiàn),必能提高效率,降低風(fēng)險(xiǎn),避免無意義的重復(fù)勞動(dòng),事半功倍,以此共勉!

 

總結(jié)

以上是生活随笔為你收集整理的软件接口设计中的版本兼容问题处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。