日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

大家好,我是Z哥。

應該有不少程序員受過這樣的困擾,特別是做后端的。項目一直在持續不斷的迭代,但是呢老版本的代碼還不能直接刪掉,因為不一定所有的調用端都能在同一時間點完成升級。

你是怎么處理這種情況的呢?

方法上增加參數?方法實現里增加if else?

論難度的話,這個問題是不難,肯定每個人都有辦法解決。但是解決的是否優雅?是否會給后續帶來更大的成本?有這考慮的人可能就不多了。

 

我看到過一些項目里做兼容的方法是真的粗暴,直接懟if else。

比如,原本創建一筆交易的時候,我們需要的數據是用戶的姓名、收貨地址、郵編。現在迭代的一個新版本需要增加手機號信息,并且不需要郵編了。

粗暴的寫法怎么寫呢?

if(postData != null ){

if(postData.mobile != null){

//新版本的處理方式

}

else{

//舊版本的處理方式

}

}

如果以后再新加了一個參數呢?if else再多嵌套一層……

你見過類似上面那樣的代碼嗎?

這可能是最容易想到的改法,但針對向前兼容不僅僅只有這一種方式。容我一個個來說。

 

/01 通過接口上增加版本號/

最常用的增加版本號的方式是直接加到接口上。比如,

http://api.xxx.com/1/user/login

如果后續的改動完全是新業務的追加,那么可以繼續沿用這個1版本的接口。如果有做刪減,那么可以新增一個版本2的接口,調整后的業務邏輯在這個版本的接口里實現。

http://api.xxx.com/2/user/login

這樣一來,你的項目中就同時存在了兩個版本的接口。新的客戶端調用2版本的,老的客戶端調用1版本的。

在這個期間,讓客戶端盡快都升級到2版本,然后后續就把1版本的接口刪掉。

 

有的人有代碼潔癖,覺得一個項目里同時存在兩個相同業務邏輯的接口不太舒服,那么可以試試下面這個方法。

 

/02 一個前端版本對應一個后端版本/

與上面的區別就是,在項目的代碼里,你不用新增加一個接口出來,直接把原先的接口修改成新的業務邏輯即可。

但是呢,新版本上線的時候,老版本不能被全部替換掉,需要保留一段時間給舊版本的客戶端使用。這件事的邏輯與前面一樣,給客戶端一段時間來升級。

 

其實所謂的「服務發現」或者說「服務治理」就是這類思想的體現,只是玩的更加體系化。

在服務發現的服務端,針對不同的服務本身就有版本的概念,比如:

OrderService/v1 : 192.168.0.1:8000 , 192.168.0.1:8001

OrderService/v2 : 192.168.0.1:8100 , 192.168.0.1:8101

UserService/v1 : 192.168.0.1:9000 , 192.168.0.1:9001

UserService/v2 : 192.168.0.1:9100 , 192.168.0.1:9101

……

客戶端調用的時候,根據其傳入的版本號,自動路由到對應版本的服務目標地址。

 

當然這個方案有一個問題是,由于產生環境同時運行著多個版本的程序,所以數據庫的字段只能增加,不能刪除,并且增加的字段需要給上默認值。

刪除字段只能隨著后續舊版本的去除進行。

 

除了以上兩種方案外,我們還可以做一些其他的工作以保障向前兼容更好地進行。

 

/01 數據庫設計預留擴展字段/

我們在設計數據表的時候,如果對后續業務預判會擴展。那么可以在做數據表設計的時候預留幾個擴展字段(ext1,ext2,ext3,……)。

這樣的話配合上面提到的方案2能更好地進行,因為后續新增的字段可以暫時存在這些擴展字段里,不需要對表結構作出變更。

 

/02 App提供強制更新功能/

如果是針對APP的向前兼容,那么務必在APP里留出一個強制更新的口子。以免有些用戶長期不升級,導致你的舊版本遲遲無法去除。

針對你可以承受的多版本情況,可以給予提示性的更新提醒,由用戶自行選擇是否更新。如果針對少數隔了多個版本還未升級的用戶,可以給出強制性的更新,讓其無法繼續在舊版本上操作。

強制更新也分局部更新和全量更新?,F在針對局部更新的「熱更新」受到了一些應用市場的限制,所以在用「熱更新」之前謹慎了解對應平臺的規則。

 

另外,向前兼容不可能是無止境,不丟掉一些包袱,不斷的新增包袱只會讓后續的維護成本不堪重負。

所以需要做好對各個版本使用情況的監控,一旦某個版本的使用量低于某個值,就應該給予強制更新的提醒。

其實類似的向前兼容問題,除了api之外,在對外提供的三方庫SDK、公司內給其他項目調用的二方庫SDK中,也有一樣的情況。

他們的解決思路也是類似的。

 

最后我建議你多看一些知名的開源項目,從中你可以學到很多優雅的編程技巧和代碼設計理念。

 

好了,總結一下。

這篇呢Z哥和你分享了軟件向前兼容的一些方法。除了粗暴的if else之外,你可以嘗試一下以下兩種方法:

  1. 通過接口上增加版本號
  2. 一個前端版本對應一個后端版本

除此之外,以下這兩件事也對做好向前兼容有很大幫助。

  1. 數據庫設計預留擴展字段
  2. APP提供強制更新功能

希望對你有所幫助。

不要光顧收藏,記得用起來哦。

分享到:
標簽:軟件
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定