Atitit.软件兼容性原理与实践 v3 q326.docx
?
?
?
Atitit.軟件兼容性原理與實踐 v3 q326.docx
?
?
1. 架構兼容性1
2. Api兼容性1
2.1. 新api ?vs ?修改舊的api1
3. Web方面的兼容性(js,html)1
3.1. Threadlocal2
4. 數據庫表兼容性2
4.1. 2.?擴展表模式2
5. 兼容性策略2
5.1. Atitit.兼容性的“一加三”策略2
5.2. 3.?同時運行模式3
5.3. 3.1.?完美的后向兼容性3
5.4. 3.2.?虛擬機模式3
5.5. 3.3.?版本兼容性模式3
5.6. 4.?向前兼容(為升級預留足夠余地)5
5.7. 5.?“向前兼容”理念5
5.8. 6.?專門處理的軟件列表5
6. ref5
?
?
1.?架構兼容性
?
?
2.?Api兼容性
2.1.?新api ?vs ?修改舊的api
最好是增加新的api。。這樣不用調整老的api..添加測試工作...
當然一些很小的的調整可以直接調整老的api
?
3.?接口兼容性
.接口和抽象類在C#和java中都差不多,這里提一下接口設計和抽象類設計的區別之處。如果你更改了一個接口的設計,比如增加了一個方法,使用你以前的代碼的用戶將不得不改變他們的代碼,否則不能運行和編譯。但是如果是一個抽象類,你可以提供一個含默認實現的方法,用戶的代碼則不需要改變。
?
批注:這個事實在Java和C#中都是一樣的。但是,就接口和抽象類(即使包括骨架類)的選用依據可不是這個,這只是一個表現而已。再有,接口一旦發布了,就是你對外的一種承諾。之后即使是版本升級也不能再做任何改動,哪怕是增加新方法。那非要增加怎么辦?如果同時提供的骨架類也控制在你的手里,可以通過在這個骨架類(其實就是抽象類的一種用法,骨架類實現接口,實際類再繼承這個骨架類,骨架類中可以為實際類實現一些通用的、或默認的方法)提供一份新增方法的默認實現來達到目的。但這并不是明智的,因為版本升級時需要增加的新方法,往往是一些實實在在的干活兒的方法,在骨架類中給出一個默認實現往往沒什么實際意義。更好的做法,是寫一個新的接口去繼承原來的接口,把新增的方法在子接口中聲明。這樣可以保持100%向前兼容,需要實現新方法的類屬于伴隨此次接口升級或日后要取實現的類。
?
作者::?綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?
漢字名:艾提拉(艾龍),???EMAIL:1466519819@qq.com
轉載請注明來源:?http://www.cnblogs.com/attilax/
?
?
4.?Web方面的兼容性(js,html)
?
?
4.1.?Threadlocal
?
它還有一些類似的方式用來使用,就是在框架級別有很多動態調用,調用過程中需要滿足一些協議,雖然協議我們會盡量的通用,而很多擴展的參數在定義協 議時是不容易考慮完全的以及版本也是隨時在升級的,但是在框架擴展時也需要滿足接口的通用性和向下兼容,而一些擴展的內容我們就需要 ThreadLocal來做方便簡單的支持。
簡單來說,ThreadLocal是將一些復雜的系統擴展變成了簡單定義,使得相關參數牽連的部分變得非常容易,以下是我們例子說明:
?
?
5.?數據庫表兼容性
5.1.?2.?擴展表模式
?
6.?兼容性策略
6.1.?Atitit.兼容性的“一加三”策略
?
“通過移除陳舊代碼降低編譯器維護成本,Java9 javac 將不再支持Java 1.5以及更早的代碼。JDK9的“一加三”策略意味著該版本的javac會支持1.9/9, 1.8/8, 1.7/7和1.6/6 中的選項。該策略會在JDK10中延續。”
標題是我對新聞的解讀。以下是我的理解。
這意味著,許多java最初的設計不合理會修改了。
將帶來許多源代碼級的不兼容性。
一些表達式,可能在早期編譯結果false,以后可能變成true了。
比如String的==
也意味著Integer i = new Integer(0);Integer j = new Integer(0);
i==j以后也可能是true了。
?
作者::??★(attilax)>>>?綽號:老哇的爪子?(?全名::Attilax?Akbar?Al?Rapanui?阿提拉克斯?阿克巴?阿爾?拉帕努伊?)?漢字名:艾龍,??EMAIL:1466519819@qq.com
轉載請注明來源:?http://www.cnblogs.com/attilax/
?
6.2.?3.?同時運行模式
?
網上沖浪,用戶用的最多的當然是瀏覽器,而Windows中內置的IE瀏覽器卻著實讓用戶用的不爽,于是呼,在國內許多雙核瀏覽器便大行其道。這?不,微軟也覺得不好意思了,在Windows?10中新增加了一個瀏覽器-Spartan,這款整合了微軟自家?Cortana?數字助理的新瀏覽器有桌面和移動兩個版本,并深度融合了?Bing?搜索服務,讓用戶的搜索體驗更加無縫。?
它將集成OneNote功能,方便用戶進行記錄,標注與分享,支持PDF文件顯示,此外還有閱讀模式等等的特性有消息稱它將支持Chrome擴展程序。全新游覽器開發代號“斯巴達”。?
不過消息顯示,新老瀏覽器初期將會共存,一方面是避免突然切換造成兼容性問題,另一方面也可以給用戶更靈活的選擇,直到微軟確定新瀏覽器足以取代IE,才會徹底轉換過去。
?
6.3.?3.1.?完美的后向兼容性
6.4.?3.2.?虛擬機模式
6.5.?3.3.?版本兼容性模式
、
?
?
6.6.?4.?向前兼容(為升級預留足夠余地)
6.7.?5.?“向前兼容”理念
?
?
所 以對于已經處于壟斷地位的公司,要居安思危,更是要敢于革自己的命,方能迎來更長久的成功。比如早期的英特爾公司雖然在存儲領域占有壟斷地位,但是其看到 CPU市場更長久的未來,毅然投入到CPU的研發之中,才有了今天的成功。但是同樣是英特爾公司,在CPU方面抱著“向前兼容”理念,讓Atom芯片背著 枷鎖而跳舞,在全球嵌入式芯片的市場,讓ARM的芯片獨領風騷。同樣微軟在移動操作系統領域,背著兼容Windows操作風格的負擔,讓微軟的移動操作系 統遠遠落后于專為移動設備而設計的iOS和安卓系統。相反谷歌卻是讓人稱道,其在保持自己在搜索領域優勢的基礎上,不僅成功推出了安卓操作系統,目前又在 機器人、智能汽車、可穿戴設備等領域提前布局。
6.8.?6.?專門處理的軟件列表
我首先是從一個流行的游戲-模擬城市的開發者那邊聽到這樣的事情的。他說模擬城市有個很致命的bug:它在釋放完內存之后便立刻重新使用內存。在DOS環境下,這樣的做法幸好不會是個什么問題。但是,在Windows下面,一個程序釋放的內存,很可能會立即被另一個程序獲取并使用,所以這樣的做法是絕對不允許的。Windows開發團隊的測試人 員測試了若干個流行的應用程序,并且搞定了它們,但是模擬城市一直出現問題。他們將問題反映給了開發人員。后者將模擬程序給研究了個徹底,找出問題的根 源,并添加了特殊的代碼去檢查模擬城市是否有運行,如果有運行的話,便將內存管理器運行為特殊模式,在此模式下,程序能夠使用釋放過的內存。?
這并不是什么稀罕的事情。Windows的測試團隊是龐大的,而他們最重要的責任就是要確保所有人都可以順利的升級他們的操作系統,不管他們安裝了哪些應用軟件,無論這些應用軟件是否使用了不公開的舊系統接口還是依賴有問題的系統資源。實際上,如果你去查閱Windows注冊表中的軟件兼容性部分,你會發現里面有很長的一個被專門處理的軟件列表。新版Windows會專門模擬一些舊系統中的bug使得這些軟件可以正常運作。
?
?
7.?ref
Java中ThreadLocal無鎖化線程封閉實現原理 – 碼農網.htm
atitit.提升兼容性最佳實踐?p825.doc - attilax的專欄 - 博客頻道 - CSDN.NET.htm
?
讀《C# 和 Java 的比較》有感 - 從Java看編程 - ITeye技術網站.html
?
atiend
?
?
轉載于:https://www.cnblogs.com/attilax/p/5922373.html
總結
以上是生活随笔為你收集整理的Atitit.软件兼容性原理与实践 v3 q326.docx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元气骑士光盘有什么用?
- 下一篇: 听说《爱超3》嘉宾请的杨二车娜姆,谁有图