軟件架構(C#)
2024-07-21 02:18:55
供稿:網友
學過軟件工程的朋友應該都知道,合理的軟件架構(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 來實現。