劉曉暉,賈令濤
(中國(guó)飛機(jī)強(qiáng)度研究所,陜西 西安 710065)
試驗(yàn)數(shù)據(jù)是強(qiáng)度試驗(yàn)的重要產(chǎn)物,也是支撐強(qiáng)度試驗(yàn)驗(yàn)證結(jié)論的基礎(chǔ)。國(guó)外在航空領(lǐng)域經(jīng)過(guò)百年的發(fā)展,積累了豐富的設(shè)計(jì)經(jīng)驗(yàn)和龐大的試驗(yàn)數(shù)據(jù),這些資源在其設(shè)計(jì)制造高性能飛機(jī)的過(guò)程中具有非常重要的作用,而我國(guó)航空工業(yè)在這方面的積累還比較匱乏。
近些年,隨著我國(guó)航空工業(yè)的快速發(fā)展,各個(gè)型號(hào)試驗(yàn)產(chǎn)生了大量的試驗(yàn)數(shù)據(jù)。因此,及時(shí)、準(zhǔn)確、完整地收集這些試驗(yàn)數(shù)據(jù)以便進(jìn)一步分析利用,成為飛機(jī)型號(hào)試驗(yàn)過(guò)程中需要完成的一件非常重要的工作。
與此同時(shí),網(wǎng)絡(luò)技術(shù)的快速發(fā)展使生產(chǎn)和生活發(fā)生了革命性的改變,各類(lèi)應(yīng)用為生產(chǎn)活動(dòng)提供了便捷的平臺(tái),飛機(jī)結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng)正是一類(lèi)這樣的Web應(yīng)用程序。
本文設(shè)計(jì)、開(kāi)發(fā)了基于B/S(Brower/Server,瀏覽器/服務(wù)器)架構(gòu)的飛機(jī)結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng),參試人員在試驗(yàn)現(xiàn)場(chǎng)就能高效、便捷地將試驗(yàn)數(shù)據(jù)提交至數(shù)據(jù)庫(kù)服務(wù)器存儲(chǔ),在提高工作效率的同時(shí),保證了數(shù)據(jù)的準(zhǔn)確、完整。
基于網(wǎng)絡(luò)的應(yīng)用系統(tǒng)架構(gòu)模式大致可以分為兩種:B/S架構(gòu)和C/S(Client/Server,客戶(hù)端/服務(wù)器)架構(gòu)。前者因其便于部署維護(hù)的特性成為越來(lái)越流行的應(yīng)用模式,但后者能充分發(fā)揮客戶(hù)端性能的特性,也使得其在需要處理復(fù)雜業(yè)務(wù)邏輯的場(chǎng)景中有一席之地。
在B/S架構(gòu)中,所有用戶(hù)工作界面通過(guò)Web瀏覽器來(lái)實(shí)現(xiàn),主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),少部分事務(wù)邏輯在瀏覽器端實(shí)現(xiàn),從而大大簡(jiǎn)化了客戶(hù)端負(fù)荷,同時(shí)使系統(tǒng)維護(hù)更加方便,可靠性和穩(wěn)定性也更高。此外,B/S架構(gòu)的一個(gè)顯著特點(diǎn)就是客戶(hù)端不需要安裝任何軟件,從而無(wú)需進(jìn)行客戶(hù)端軟件的維護(hù),這使得用戶(hù)在任何一臺(tái)具有Web瀏覽器的終端上都可以非常方便地訪問(wèn)數(shù)據(jù)庫(kù)Web應(yīng)用程序,對(duì)用戶(hù)的基本計(jì)算機(jī)操作技能的要求也較低。
層的概念體現(xiàn)了應(yīng)用程序的邏輯功能,而ASP.NET程序根據(jù)所實(shí)現(xiàn)的功能,大致可以分為表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層,也可以根據(jù)實(shí)際需要將其擴(kuò)展為N層[1]。本文系統(tǒng)采用3層體系結(jié)構(gòu)設(shè)計(jì),圖1展示了3層體系結(jié)構(gòu),同時(shí)顯示3層體系結(jié)構(gòu)與B/S結(jié)構(gòu)的對(duì)應(yīng)關(guān)系。
圖1 3層體系結(jié)構(gòu)與B/S架構(gòu)的對(duì)應(yīng)關(guān)系
如圖1所示,表示層提供用戶(hù)界面,即客戶(hù)端瀏覽器,用戶(hù)通過(guò)瀏覽器訪問(wèn)本文系統(tǒng)。該層代碼的主要任務(wù)是提供人性化的用戶(hù)接口,同時(shí)從業(yè)務(wù)邏輯層提供的接口獲得用戶(hù)應(yīng)用需要的信息。業(yè)務(wù)邏輯層實(shí)現(xiàn)業(yè)務(wù)功能,是系統(tǒng)的核心部分,為表示層提供任何用戶(hù)應(yīng)用的接口,同時(shí)又負(fù)責(zé)調(diào)用數(shù)據(jù)訪問(wèn)層提供的功能與數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的交互。數(shù)據(jù)訪問(wèn)層位于最底層,以ADO.NET為接口,為業(yè)務(wù)邏輯層提供對(duì)數(shù)據(jù)操作的接口,即對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)資源進(jìn)行相應(yīng)的插入、更新、選擇、刪除等操作,從而避免業(yè)務(wù)邏輯層和表示層直接跟數(shù)據(jù)庫(kù)交互[2]。
在本文系統(tǒng)中,表示層通過(guò)ASP.NET的控件以及HTML控件共同實(shí)現(xiàn),滿(mǎn)足用戶(hù)對(duì)系統(tǒng)的各項(xiàng)功能要求。業(yè)務(wù)邏輯層中,業(yè)務(wù)實(shí)體為數(shù)據(jù)庫(kù)中試驗(yàn)中各類(lèi)實(shí)體的對(duì)象化表示,業(yè)務(wù)組件負(fù)責(zé)業(yè)務(wù)實(shí)體與數(shù)據(jù)庫(kù)的交互,以及業(yè)務(wù)實(shí)體之間的邏輯關(guān)系轉(zhuǎn)換,而業(yè)務(wù)工作流在本文系統(tǒng)中不存在。數(shù)據(jù)訪問(wèn)層提供了各種與數(shù)據(jù)庫(kù)交互的函數(shù),完成業(yè)務(wù)邏輯層對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)功能,實(shí)現(xiàn)對(duì)數(shù)據(jù)的各類(lèi)操作。
試驗(yàn)數(shù)據(jù)采用關(guān)系數(shù)據(jù)庫(kù)和文件系統(tǒng)相結(jié)合的存儲(chǔ)方式,如圖2所示,其中關(guān)系數(shù)據(jù)庫(kù)采用SQL Server來(lái)管理,在損傷檢測(cè)系統(tǒng)中主要存儲(chǔ)試驗(yàn)項(xiàng)目信息、部件結(jié)構(gòu)的邏輯關(guān)系,同時(shí)存儲(chǔ)數(shù)據(jù)量較小、結(jié)構(gòu)化的數(shù)據(jù)信息,如試驗(yàn)名稱(chēng)、試驗(yàn)部件的各項(xiàng)信息描述及它們之間的邏輯關(guān)系、試驗(yàn)過(guò)程中產(chǎn)生的可量化表示的試驗(yàn)結(jié)果,同時(shí)通過(guò)存儲(chǔ)文件系統(tǒng)的邏輯層次可以達(dá)到管理文件系統(tǒng)中數(shù)據(jù)的目的。因?yàn)樵囼?yàn)過(guò)程中除了結(jié)構(gòu)化的結(jié)果外,還包括數(shù)據(jù)量相當(dāng)大的以文件形式保存的結(jié)果文件,這些數(shù)據(jù)是非結(jié)構(gòu)化的且大小不定,在關(guān)系數(shù)據(jù)庫(kù)中難以存儲(chǔ)、檢索,因此使用文件系統(tǒng)來(lái)存儲(chǔ),再根據(jù)具體需要可以通過(guò)關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)的信息進(jìn)行簡(jiǎn)單檢索后進(jìn)一步分析。
圖2 數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)
根據(jù)試驗(yàn)數(shù)據(jù)的特點(diǎn),本文系統(tǒng)采用圖2所示的關(guān)系數(shù)據(jù)庫(kù)與文件系統(tǒng)相結(jié)合的數(shù)據(jù)庫(kù)存儲(chǔ)方式,既可以使系統(tǒng)靈活、方便地處理收集到的數(shù)據(jù)信息,又能充分發(fā)揮關(guān)系數(shù)據(jù)庫(kù)和文件系統(tǒng)各自的優(yōu)勢(shì)。該存儲(chǔ)方式的缺點(diǎn)在于進(jìn)行數(shù)據(jù)庫(kù)備份時(shí),需要將文件系統(tǒng)保存的數(shù)據(jù)文件同時(shí)進(jìn)行相應(yīng)的備份。
ASP.NET提供了豐富的數(shù)據(jù)庫(kù)顯示與訪問(wèn)控件,如:可以通過(guò)ObjectDataSource控件實(shí)現(xiàn)表示層與數(shù)據(jù)訪問(wèn)層、表示層與業(yè)務(wù)邏輯層之間的聯(lián)系,從而實(shí)現(xiàn)數(shù)據(jù)的選擇、編輯等操作;也可以在3層結(jié)構(gòu)的基礎(chǔ)上使用ADO.NET或SqlDataSource類(lèi)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)訪問(wèn)。其中,ADO.NET技術(shù)是微軟針對(duì)ADO技術(shù)的缺陷而設(shè)計(jì)的新一代數(shù)據(jù)訪問(wèn)對(duì)象,是微軟最新的數(shù)據(jù)訪問(wèn)技術(shù),具有互操作性強(qiáng)、標(biāo)準(zhǔn)化和可編程性等優(yōu)點(diǎn),并涵蓋基于Web的數(shù)據(jù)驅(qū)動(dòng)解決方案。ADO.NET在實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)時(shí)采用直接編碼的方式,因此具有靈活、可自定義和性能優(yōu)越的特點(diǎn)[3],尤其與本文系統(tǒng)的3層體系結(jié)構(gòu)相結(jié)合,可充分發(fā)揮ADO.NET技術(shù)的優(yōu)勢(shì)。
ADO.NET建立在.NET Framework提供的平臺(tái)之上,該平臺(tái)將使用數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的任務(wù)分開(kāi),因此ADO.NET對(duì)象模型分成了兩組不同的對(duì)象:數(shù)據(jù)提供者和數(shù)據(jù)集。數(shù)據(jù)提供者直接處理數(shù)據(jù)源,數(shù)據(jù)集裝入數(shù)據(jù)信息。本文系統(tǒng)在實(shí)現(xiàn)時(shí)同時(shí)應(yīng)用了SqlDataReader和DataSet這兩種ADO.NET數(shù)據(jù)集對(duì)象,前者對(duì)返回?cái)?shù)據(jù)是只讀、前向、非緩存處理的,而后者可以對(duì)返回?cái)?shù)據(jù)進(jìn)行篩選、排序等操作。例如,ADO.NET使用SQL語(yǔ)句查詢(xún)數(shù)據(jù)后返回SqlDataReader對(duì)象,可以通過(guò)查詢(xún)SqlDataReader是否包含數(shù)據(jù)行判斷是否有滿(mǎn)足條件的結(jié)果;或者通過(guò)查詢(xún)返回DataSet對(duì)象,對(duì)返回的數(shù)據(jù)進(jìn)行簡(jiǎn)單篩選后通過(guò)GridView等控件顯示滿(mǎn)足條件的結(jié)果。
用戶(hù)查詢(xún)數(shù)據(jù)庫(kù)時(shí),通常可以查詢(xún)到大量符合條件的結(jié)果,本文系統(tǒng)中的試驗(yàn)數(shù)據(jù)也不例外。如果將這些查詢(xún)結(jié)果一次全部顯示出來(lái),一則會(huì)占用過(guò)多的網(wǎng)絡(luò)資源,降低Web系統(tǒng)的響應(yīng)速度,二則會(huì)給用戶(hù)瀏覽帶來(lái)不便。因此,需要對(duì)查詢(xún)到的信息使用分頁(yè)技術(shù)分批顯示。
ASP.NET的數(shù)據(jù)庫(kù)Web應(yīng)用程序中常用的分頁(yè)技術(shù)一般有3種:(1)基于GridView等控件的分頁(yè);(2)LINQ(Language Integrated Query,語(yǔ)言級(jí)集成查詢(xún))代碼動(dòng)態(tài)構(gòu)建語(yǔ)句分頁(yè);(3)存儲(chǔ)過(guò)程(Stored Procedure)分頁(yè)[4,5]。第一種分頁(yè)方式最為方便,在ASP.NET中無(wú)需太多的編碼就可以實(shí)現(xiàn),但是該方式一次會(huì)將所有的結(jié)果都綁定到顯示控件,因此耗費(fèi)時(shí)間和資源較為嚴(yán)重;第二種方式通過(guò)在.NET Framework中添加一些語(yǔ)法查詢(xún)特性來(lái)實(shí)現(xiàn)數(shù)據(jù)查詢(xún),該方式和存儲(chǔ)過(guò)程方式類(lèi)似,但性能較存儲(chǔ)過(guò)程要低一些;第三種方式是一組為完成特定功能的SQL語(yǔ)句的集合,是一個(gè)由流控制和SQL語(yǔ)句書(shū)寫(xiě)的過(guò)程,該過(guò)程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,用戶(hù)通過(guò)控制參數(shù)輸入完成數(shù)據(jù)查詢(xún)。這3種方式中效率最高的是存儲(chǔ)過(guò)程分頁(yè),因此本文系統(tǒng)在實(shí)現(xiàn)時(shí)使用存儲(chǔ)過(guò)程實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果的分頁(yè)操作。
在使用存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)技術(shù)時(shí),需要先根據(jù)查詢(xún)條件獲取符合條件的數(shù)據(jù)總量,并計(jì)算出頁(yè)碼總數(shù),然后根據(jù)參數(shù)傳遞的頁(yè)碼返回需要的數(shù)據(jù),最后綁定到數(shù)據(jù)顯示控制完成分頁(yè)功能。該方式需要編寫(xiě)較復(fù)雜的SQL語(yǔ)句,雖然稍顯復(fù)雜,但是時(shí)間、空間和網(wǎng)絡(luò)資源的利用率最高。
在本文系統(tǒng)開(kāi)發(fā)之前,已經(jīng)保存了大量格式化的Word文件數(shù)據(jù),而且在日后的工作中還需要生成格式化的多種Word文檔。因此,本文系統(tǒng)在開(kāi)發(fā)過(guò)程中,需將這些已有的Word文件中的信息存儲(chǔ)到數(shù)據(jù)庫(kù)中,同時(shí)需要能夠根據(jù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息生成格式固定的目標(biāo)文檔,即系統(tǒng)具有對(duì)格式化Word文檔的導(dǎo)入和導(dǎo)出功能。
因?yàn)閃ord文件的格式已知,因此在導(dǎo)入時(shí)根據(jù)不同文檔的格式分別讀取文件中相應(yīng)的數(shù)據(jù)信息存入數(shù)據(jù)庫(kù)即可。導(dǎo)出成格式化的Word文檔,可以通過(guò)兩種方法實(shí)現(xiàn):(1)使用Word模板;(2)動(dòng)態(tài)創(chuàng)建Word文檔對(duì)象。第一種方法需要對(duì)每一種輸出的格式化Word文檔創(chuàng)建一個(gè).DOT后綴的格式化Word模板文件,該模板文件中已經(jīng)定義了表格以及為每個(gè)表格設(shè)定了標(biāo)記,之后在程序中通過(guò)Word應(yīng)用程序?qū)ο蠛臀臋n對(duì)象給預(yù)定義的標(biāo)記位置賦值,完成數(shù)據(jù)輸出。第二種方法完全通過(guò)編程實(shí)現(xiàn),根據(jù)不同的格式化Word文檔,在不同的程序段中首先讀取相應(yīng)的數(shù)據(jù)信息,然后通過(guò)調(diào)用Word應(yīng)用程序?qū)ο蠛臀臋n對(duì)象生成相應(yīng)的表格信息并填寫(xiě)數(shù)據(jù)信息。這種方法可以同時(shí)設(shè)置Word文檔的各種格式,如行距、字體、頁(yè)眉、頁(yè)腳等。與第一種方法相比,第二種方法更加靈活,只需要修改程序就可以完成Word格式的修改,因此本文系統(tǒng)在實(shí)現(xiàn)時(shí)采用第二種方法實(shí)現(xiàn)格式化Word文檔的生成。
本文系統(tǒng)在輸入數(shù)據(jù)時(shí),首先要根據(jù)試驗(yàn)名稱(chēng)創(chuàng)建試驗(yàn),然后再創(chuàng)建試驗(yàn)下的部件名稱(chēng),之后輸入檢測(cè)的損傷數(shù)據(jù)信息。圖3所示為系統(tǒng)創(chuàng)建數(shù)據(jù)時(shí)輸入損傷信息的界面。
圖3 結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng)數(shù)據(jù)錄入
此外,系統(tǒng)提供了3種檢索方式:快速檢索時(shí),用戶(hù)只需根據(jù)系統(tǒng)提示選擇檢索的下拉框即可完成;初級(jí)檢索時(shí),用戶(hù)可以根據(jù)某一項(xiàng)內(nèi)容進(jìn)行精確或模糊查找;高級(jí)檢索時(shí),用戶(hù)可以通過(guò)對(duì)多項(xiàng)內(nèi)容的組合進(jìn)行查找。圖4、圖5為系統(tǒng)快速檢索和初級(jí)檢索的界面。
圖4 結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng)快速檢索界面
圖5 結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng)初級(jí)檢索界面
飛機(jī)結(jié)構(gòu)損傷數(shù)據(jù)管理系統(tǒng)的實(shí)現(xiàn),為試驗(yàn)人員提供了便捷的數(shù)據(jù)存儲(chǔ)方式,同時(shí)也可供所有需要使用數(shù)據(jù)的用戶(hù)進(jìn)行方便的檢索,為以后的試驗(yàn)設(shè)計(jì)、數(shù)據(jù)分析提供數(shù)據(jù)基礎(chǔ)。
隨著我國(guó)航空工業(yè)的快速發(fā)展,大量的試驗(yàn)數(shù)據(jù)隨之產(chǎn)生,本文系統(tǒng)為試驗(yàn)數(shù)據(jù)的管理提供了高效、便捷的途徑?;贐/S架構(gòu)、分層實(shí)現(xiàn)各個(gè)功能模塊;在與數(shù)據(jù)庫(kù)的交互過(guò)程中靈活運(yùn)用了ADO.NET技術(shù),并使用存儲(chǔ)過(guò)程分頁(yè)的方式降低系統(tǒng)查詢(xún)時(shí)的網(wǎng)絡(luò)負(fù)荷;提供的格式化Word文檔導(dǎo)入導(dǎo)出功能便于歷史數(shù)據(jù)的操作,為生成格式化的Word報(bào)告提供了便利。
當(dāng)前,本文系統(tǒng)只是針對(duì)結(jié)構(gòu)損傷數(shù)據(jù)的管理,后續(xù)將完善對(duì)其他試驗(yàn)數(shù)據(jù)的存儲(chǔ)、管理、檢索,并為相關(guān)分析提供支持。