學過軟體工程的朋友應該都知道,合理的軟體架構(Software Architecture)對後期的維護、新功能的添加是極為有利的。我對研究 Windows 的架構非常有興趣,自己也想動手實踐一下。但是很遺憾,我沒有什麼大軟體的代碼可以拿來研究,說句實話,就算是有,可能我也沒時間去鑽研。
我只好拿我以前寫的一個小軟體來改造,這個軟體最早的一些版本結構顯得不太清晰(我已經寫了20多個版本啦)。也許你會覺得這對一個小軟體來說沒有必要,但這隻是一個實驗性的東西,將來這個架構也可以用於更大一些的軟體。要知道系統結構對大型軟體來說非常之重要,一個合理的結構會節省很多的工作量。
先簡單介紹一下我的改造對象吧。AoouchWare(R) Date Convert 可以用於修改檔案的建立時間、修改時間、訪問時間,支援批量更改。可以對系統時間進行即時追蹤。本軟體基於Microdoft.NET技術編寫,正常的使用需要首先安裝 Microsoft.NET Framework 1.0 版或更高的版本。
從下面的圖中可以看到在 SP2 版中外殼層和管理層是分開的,但是最初的 Release 版上面兩層是和在一起的。所以從 SP1 版我就開始了對它的改造工作,要把一開始就定義為一個整體的兩個層次完全的分開並不容易,所以我分了兩步進行。SP1 版算是一個半改造的東西吧,上面兩層並未完全的分離,只是把各個模組中的 文字資訊提取到了一個檔案 Notify.dll 中,這樣的架構還不算完美。現在我的這個版本已經基本上把我頭腦中的架構實現了,儘管對記憶體的最佳化還要放在下個版本中(.NET 程式的記憶體佔用實在是太大了)。
下面簡單談一下我的研究成果吧。其實說是研究成果,只不過是把我頭腦中的一些想法變成現實罷了。
我的思路說明:我的目標就是要把它分成3個層次,也就是外殼層(Shell Layer)、管理層(Manage Layer)和核心層(Kernel Layer)。外殼層主要包括 Notify.dll 和 UShell.dll,這兩個是使用者直接接觸到的,他們的任何更改對軟體功能都沒有直接影響。管理主要由主程式來實現,主程式中沒有任何可以進行實質性工作的代碼,只是提供了對介面的管理功能,目的是把上下兩層有效銜接起來。這樣即使要更新下層的代碼或介面,都不會牽涉到使用者層,也就是說,軟體更新包的大小不會很大。核心層包括兩部分,一個是環境監測(Environment),包括 EnvirChk.dll、VerRep.dll,這兩個模組主要實現的是檔案版本管理和環境變數管理,如果使用者在更新時留下了不屬於目前的版本的檔案,程式是不會啟動並執行。還有一部分當然就是實現軟體功能的執行(Execution)模組了,包括 FileEvt.dll、TimeChkR.dll,這個我就不多介紹了。
各個模組的具體作用:
- Notify.dll 用來儲存使用者介面上的文字資訊,也可以被其他模組調用以發出提示資訊。這也為多語言程式的開發提供了便利。
- UShell.dll 這是介面部分,主程式的介面是從這個檔案中繼承的。這樣一來便實現了換膚功能。
- DateCov.dll 這就是主程式,實現了對上下兩層的銜接和管理。
- EnvirChk.dll 這個模組用作檢測環境變數,和版本管理。不合理的變數是不能被引用的,同樣錯誤的版本將導致程式不能運行。
- VerRep.dll 用來返回各個模組現在正確的版本號碼。
- FileEvt.dll 用來調用開啟檔案(夾)對話方塊,以及執行對檔案的更改。
- TimeChkR.dll 可以返回當前的系統時間,以及實現對使用者輸入時間的標準檢測,這樣可以避免很多不必要的錯誤。
Date Convert + SP2 : http://free.efile.com.cn/aoouch/AoouchWare/DCSP2/DCSetup_CHS.exe
PlusPack for SP2 : http://free.efile.com.cn/aoouch/AoouchWare/DCSP2/DCPSetup_CHS.EXE
關於軟體的下載:我發布的那個安裝包是綠色的,如果你還不放心可以用 WinRAR 來解開。英文版的安裝包我就不提供了,如果想用英文版的朋友可以下載 PlusPack 來實現。