王濤


摘 要:同一系列不同機型之間,通常只存在比較小的差異。如何在不同機型的程序之間,做到代碼復用,減小代碼維護量,是進行程序設計時需考慮的很重要一個方面。文中提出一種采用結構化存儲技術,保存不同配置信息的方法,應用該方法可達到上述目的。
關鍵詞:結構化存儲;配置;研究分析
1 概述
當前的工業設計中,經常會出現這樣一種情況:不同型號機器之間,機械結構、硬件配置等方面差異較大,但是相應的操作軟件主要功能相同,僅需修改少量代碼即可適用于不同機型。為最大程序的實現代碼復用,減少不同機型的代碼編寫工作量與后期維護工作量,可在軟件中采用整機配置表的方式,通過不同的配置設置,實現適用于不同機型的目的。文章介紹一種采用結構化存儲技術實現整機配置表的方法。
2 結構化存儲技術介紹
結構化存儲,是微軟公司在推出Windows系統后,推出的一種采用COM技術架構的存儲方法。該方法把文件系統的概念引入到文件內部,從而在存儲結構上支持多應用程序的并發訪問。所謂結構化存儲方法,實際是把樹狀文件系統的原理應用到單個的文件中,使得單個文件也能像文件系統一樣包含“子目錄”,“子目錄”還可以包含更深層次的“子目錄”,各個“目錄”可以含多個文件,把原來需要多個文件存儲的內容按樹狀結構和層次保存到一個文件中去。采用結構化存儲方法,可以極大程度的提高磁盤空間使用效率;同時便于在單個文件中明確內容的歸屬關系和分類關系。
3 整機配置表
為在軟件中反映不同型號機器之間的區別,需要制定一份整機配置表。制定整機配置表時,首先確定機器所用的主要元器件,包括品牌、數量、功能等。不同機型,實現同一功能所用主要元器件可能存在差異,此時,可將不同機型所用元器件作為選擇項列入配置表中。其次,考慮機械結構上的差異。然后,考慮功能上的差異。不同型號機器,實現的功能可能存在不同之處,可將所有型號機器實現的功能進行羅列。最后,考慮操作方式上的差異。不同型號機器在操作上,可能存在觸屏操作、按鈕操作、本地操作、遠程操作等不同方式,在配置表中也需將所有的操作方式進行列舉。此外,機器設計是在不斷發展進步的,在制定配置表時,需為今后可能增加的器件、功能等預留擴展空間。實際制定整機配置表時,可能還需根據實際情況考慮其它因素,在此就不一一列舉。根據以上分析,設計整機配置表結構如圖1所示。
4 結構化存儲設計
整機配置表制定完成后,就可在軟件上將整機配置反映出來,并進行保存。此處,選用結構化存儲的方式,進行保存。
4.1 配置信息結構體設計
根據上文得出的整機配置表,在軟件中進行配置信息結構體設計,要求:在整機配置結構體中能完整的反映出所有可能存在的配置情況。對于同一器件的不同品牌,可在代碼中通過枚舉的方式,列出所有可選擇品牌,便于具體操作時進行選擇。其余選項中,存在多種方式進行選擇的,也需通過枚舉的方式,列出所有可選擇項。整機配置結構體設計完成后,即可作為結構化存儲的一個操作對象進行存儲操作。
4.2 存儲結構設計
在配置文件中,如何保存不同機型的配置信息,這是采用結構化存儲方法實現整機配置表的關鍵。這里,根據以下要求進行存儲結構設計:首先,配置文件中要包含所有不同機型的配置信息。每一種機型的配置信息,都統一采用前文中設計的整機配置結構體,保存不同配置信息。為便于操作,在配置文件中,對每一配置信息都單獨命名,且名稱不能重復。其次,在配置文件中,能夠增加新配置,刪除無效配置。最后,要在配置文件中標記出當前有效(或正在使用)的配置。根據上述要求,設計配置文件結構如圖2所示。
4.3 結構化存儲代碼編寫
存儲結構設計完成后,需要在程序中編寫代碼,實現對配置信息的存取操作。這里,需要實現的基本操作包括:配置文件創建,配置信息列表讀取,配置信息保存、修改、刪除、讀取等。
下面列出結構化存儲基本操作代碼:
4.3.1 創建配置文件
StgCreateDocfile(StringToOleStr(FStgName), FStgModeSave, 0, FStgRoot);
4.3.2 讀取配置信息列表
iHRESULT := FStgRoot.EnumElements(0, nil, 0, EnumStatStg);
while EnumStatStg.Next(1, StatStg, nil) = S_OK do
begin
s := StatStg.pwcsName;
RList.Add(s);
end;
4.3.3 保存配置信息
FStgRoot.CreateStream(StringToOleStr(stmName), FStgModeSave, 0, 0, stmData);
OleStream.CopyFrom(LoadStream, LoadStream.Size);
4.3.4 讀取配置信息
FStgRoot.OpenStream(StatStg.pwcsName, nil, FStgModeRead, 0, stmData);
LoadStream.CopyFrom(OleStream, OleStream.Size);
4.3.5 刪除無效配置信息
FStgRoot.DestroyElement(StringToOleStr(stmName))
5 配置表應用
結構化存儲結構設計完成后,即可將其應用于整機程序中。具體應用時,整機程序初始運行時,首先從配置文件中讀取當前機型的配置信息,然后根據配置選擇相應功能模塊,從而實現相應操作。
此外,若對整機進行了設計改進,此時僅需修改相應的配置信息,然后在程序中進行簡單修改,即可實現原有程序適用于新設計,同時新程序也能兼容舊機型,從而減少代碼維護量。
6 結束語
采用結構化存儲技術保存整機配置信息,可以有效實現代碼復用,從而實現同一程序適配不同機型的目的,有效減少后期代碼的維護量。但與此同時,程序中增加運用整機配置信息選擇,會大量增加邏輯判斷語句的應用,從而加大程序的復雜程度。因此,采用結構化存儲技術保存整機配置信息的方法,需根據實際情況進行選擇,不可盲目使用。
參考文獻
[1]李玲娟,阮東明.結構化存儲文件的結構解讀和壓縮存儲技術實現[J].現代計算機,2001(9).
[2]李安平,孟揚.存儲技術淺析[J].計算機與網絡,2008(12).
[3]黃雄波,丘陵.基于Delphi下的OLE結構化存儲原理與應用[J].電腦編程技巧與維護,2003(7).
[4]胡品芳.結構化存儲系統中元數據集群的設計與實現[D].電子科技大學,2012.
[5]黎臻.分布式結構化存儲系統設計與實現[D].電子科技大學,2011.