1. 程式人生 > >軟體設計中的可移植性的考慮

軟體設計中的可移植性的考慮

由於在下水平相當有限,不當之處還望大家不吝賜教。

參考Linux核心的思路,對應用程式的可移植性設計做出的思考。

Linux核心中,最前期的啟動程式碼是特定體系結構的程式碼,還有中斷、異常、系統呼叫的前期都會進入特定體系結構的框架程式碼,然後再轉入體系結構無關的程式碼。

特定體系結構的程式碼,位於以體系結構名稱命名的資料夾中。

那麼對於應用程式的設計,如何借鑑呢?以GUI程式為例。

假如一個C語言寫的應用程式,需要支援多種GUI環境(win32、QT、X window等)。那麼這些不同的GUI環境中的應用程式,初始啟動程式碼不同,然後執行起來以後各種互動事件的框架程式碼也不同。因此,可以考慮為不同的GUI環境建立一個以GUI環境名稱命名的資料夾,將相關程式碼放進去。

如果應用比較簡單,可以將環境無關的程式碼(純業務邏輯,例如掃雷遊戲的純邏輯處理)放在名稱為core的資料夾中。

環境相關程式碼,在呼叫環境無關的程式碼計算出結果後,更新GUI介面即可。Linux下使用者通過系統呼叫獲取當前時間的例子與此比較相似。

這樣一來,構建出的應用程式,由GUI環境相關程式碼與環境無關程式碼兩部分組成。

如果應用程式比較複雜,core裡面還要呼叫一些外部介面,完成相應的操作,而這些操作如何實現又是與執行環境相關的。那怎麼辦呢?

核心中,也有類似的情況。例如,中斷來了,先會有一些特定體系結構的框架程式碼被執行,然後進入中斷處理的通用程式碼,然後最終找到相應的驅動程式的處理介面,呼叫驅動程式的介面。然而,驅動程式要做的事情,核心並不理解(不像掃雷遊戲的邏輯處理,上層知道他做的是什麼工作),同時驅動要做的事情如何實現還與環境有關。

此時,核心就對外提供一些介面,例如讀寫暫存器的介面等,從而讓驅動無須關心環境相關問題,實現了驅動的可移植性。

那麼,應用程式的設計中,同樣可以借鑑這種做法。