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