一分鐘理解向後相容
阿新 • • 發佈:2019-01-22
什麼是相容
談到相容,少不了獲得相容收益的目標物件,以及提供相容功能的元件這兩個相互對應的概念。
如果一個目標物件,能否在同一組件的同個不同版本上協同工作,則移該元件的兩個版本是相容的,如下圖所示:
相容性分類
元件的兩個版本是相容的,那就會有新版本相容舊版本,或者舊新版本相容新版本這兩個相容方向
在舊版本上開發的目標,或者舊版本生成的資料,能夠在新版本正確執行,或者正確處理,稱為向後相容。
換句話說:向後相容是指向歷史相容,如下圖所示:
向前相容卻相好相反,在新版本上開發的目標,或者新版本上生成的資料,能夠在舊新版本上執行,或者處理,則稱為向前相容。
換句話說:向前相容
例解向後相容
以軟體為例子,說業界幾個知名的向後相容案例。
作業系統相容應用程式
Ubuntu 16.04 向後相容 Ubuntu 12.04
硬體相容作業系統
Intel 64位處理器向後相容32位處理器
軟體相容資料
Office 2010 向後相容 Office 2003
實現向後相容有什麼魔法
說個大實話,提供相容性本身就是一種負擔,它會制約著產品的設計。但在很多情況下,如果軟體或者硬體不提供相容性,客戶是無法為你的產品買單的。
如何設計一個產品才能滿足向後相容呢,它的祕訣就是只新增介面,對現有介面不能做任何修改
這約束太強了吧,在軟體只新增介面或功能同時,怎麼也會對現有的介面做修改吧?
如果真的需要修改介面,也請不要修改原來的介面,而是採用下面兩種策略:
- 開發一個新介面,上層新版本軟體請使用新介面;沒有重編修改原始碼和編譯的老軟體仍然使用老介面
- 保留原有介面,開發一個同名的新介面,但介面版本號不同(Linux下的glibc就採用了版本機制實現應後相容能力)
如果提供相容性的元件的各個介面是相對獨立的,比如Linux下的glibc執行庫,實現向後相容相對比較容易。但是如果元件對外提供的介面非常內聚,提供兩個版本介面實現,是很難維護的。
小結
後向相容是指向歷史版本相容,新版本完全相容舊版本的介面和功能。