白維維,王 萍,蘭 帆,時(shí) 進(jìn)
(河海大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇 常州 213022)
在國(guó)內(nèi)外大型綜合性體育賽事中競(jìng)賽信息系統(tǒng)已經(jīng)成為與賽事密不可分的組成部分,而競(jìng)賽成績(jī)處理系統(tǒng)是聯(lián)系競(jìng)賽信息系統(tǒng)各個(gè)環(huán)節(jié)的紐帶和核心。跳水競(jìng)賽成績(jī)處理系統(tǒng)主要任務(wù)有:完成各種基礎(chǔ)數(shù)據(jù)的錄入工作;競(jìng)賽日程編排,出場(chǎng)序編排,按照競(jìng)賽規(guī)則對(duì)競(jìng)賽數(shù)據(jù)進(jìn)行處理;生成,打印,分發(fā)報(bào)表。基于運(yùn)動(dòng)會(huì)比賽的不可重復(fù)性、內(nèi)容多變性、嚴(yán)格的實(shí)時(shí)性要求等特點(diǎn),該系統(tǒng)根據(jù)跳水特點(diǎn),基于軟件設(shè)計(jì)中面向?qū)ο笏枷?,綜合應(yīng)用三層軟件體系架構(gòu)設(shè)計(jì)整個(gè)成績(jī)處理系統(tǒng)。采用三層體系結(jié)構(gòu),將系統(tǒng)的顯示、業(yè)務(wù)邏輯和存儲(chǔ)分層處理,降低層與層間的依賴性,使之具有分布性強(qiáng)、維護(hù)方便、開(kāi)發(fā)簡(jiǎn)單且共享性強(qiáng)、總體成本低等特點(diǎn)。本系統(tǒng)已通過(guò)了中華人民共和國(guó)第十二屆全運(yùn)會(huì)符合性測(cè)試,滿足競(jìng)賽需求。
為滿足競(jìng)賽需求,配合比賽,競(jìng)賽成績(jī)系統(tǒng)主要包括以下幾個(gè)功能:基礎(chǔ)信息管理,對(duì)賽會(huì)信息,場(chǎng)館信息,競(jìng)賽項(xiàng)目等信息進(jìn)行管理;裁判信息管理,對(duì)裁判基礎(chǔ)信息,裁判分工任務(wù),裁判抽簽情況等進(jìn)行管理;報(bào)名報(bào)項(xiàng)管理,對(duì)代表團(tuán)、運(yùn)動(dòng)員及其報(bào)項(xiàng)信息進(jìn)行管理;賽事編排,對(duì)運(yùn)動(dòng)員的出場(chǎng)順序等信息進(jìn)行抽簽編排;成績(jī)綜合處理,對(duì)從數(shù)據(jù)采集端發(fā)送過(guò)來(lái)的成績(jī)數(shù)據(jù)進(jìn)行處理,并能手動(dòng)或自動(dòng)排名,晉級(jí)等,遇到同名情況還可以進(jìn)行相關(guān)處理,如加賽。
跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件功能結(jié)構(gòu)如圖1所示。
圖1 跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件功能結(jié)構(gòu)圖
根據(jù)競(jìng)賽需求,跳水業(yè)務(wù)流程如下:
在比賽開(kāi)始前,需要先從中央成績(jī)處理系統(tǒng)接受運(yùn)動(dòng)員報(bào)名報(bào)項(xiàng)系統(tǒng)的運(yùn)動(dòng)員報(bào)名報(bào)項(xiàng)數(shù)據(jù),并對(duì)這些報(bào)名報(bào)項(xiàng)數(shù)據(jù)進(jìn)行管理,根據(jù)競(jìng)賽規(guī)則、參賽代表團(tuán)、參賽與報(bào)項(xiàng)人數(shù)進(jìn)行賽事編排。
在比賽進(jìn)行時(shí),采集并接收前端數(shù)據(jù)采集系統(tǒng)的成績(jī)數(shù)據(jù),或手工錄入現(xiàn)場(chǎng)比賽成績(jī)數(shù)據(jù),進(jìn)行排名,晉級(jí)等成績(jī)處理以及特殊情況的處理。并且能實(shí)時(shí)提供現(xiàn)場(chǎng)競(jìng)賽成績(jī)信息給電視字幕、現(xiàn)場(chǎng)顯示系統(tǒng)等。
在比賽結(jié)束后,及時(shí)發(fā)布現(xiàn)場(chǎng)競(jìng)賽信息與報(bào)表至數(shù)據(jù)中心,通過(guò)Internet發(fā)布到官方網(wǎng)站上。
跳水競(jìng)賽成績(jī)處理系統(tǒng)功能模塊如圖2所示。
圖2 跳水競(jìng)賽成績(jī)處理系統(tǒng)功能模塊圖
跳水競(jìng)賽成績(jī)處理系統(tǒng)是整個(gè)競(jìng)賽信息系統(tǒng)數(shù)據(jù)信息綜合處理的中樞,它不僅需要為現(xiàn)場(chǎng)成績(jī)處理和現(xiàn)場(chǎng)競(jìng)賽提供組織與管理服務(wù),還要通過(guò)現(xiàn)場(chǎng)顯示服務(wù)系統(tǒng)為現(xiàn)場(chǎng)觀眾服務(wù)。除此之外還要為電視轉(zhuǎn)播以及其他更為廣泛的信息發(fā)布系統(tǒng)提供數(shù)據(jù)接口服務(wù)。
跳水競(jìng)賽成績(jī)處理系統(tǒng)涉及到大量的數(shù)據(jù)處理操作,包括對(duì)內(nèi)部擁有的數(shù)據(jù)進(jìn)行維護(hù),對(duì)從計(jì)時(shí)記分系統(tǒng)獲取的數(shù)據(jù)進(jìn)行解析,對(duì)產(chǎn)生的晉級(jí)、名次和獎(jiǎng)牌數(shù)據(jù)等進(jìn)行上傳,以及對(duì)以上數(shù)據(jù)的存儲(chǔ)等。這些業(yè)務(wù)十分復(fù)雜,各自的邏輯都緊緊糾纏在一起,彼此間相互依賴,哪一部分都是不可替換的。但業(yè)務(wù)邏輯依賴于競(jìng)賽規(guī)程,常常會(huì)改變,一旦改變,則要改變多個(gè)業(yè)務(wù)邏輯的設(shè)計(jì),如果設(shè)計(jì)不好,會(huì)影響到系統(tǒng)的功能擴(kuò)展、維護(hù)和系統(tǒng)重用。
為解決這些問(wèn)題,考慮采用三層體系結(jié)構(gòu),將系統(tǒng)顯示,業(yè)務(wù)邏輯和存儲(chǔ)分層處理,降低層與層間的依賴性,既可以保證未來(lái)良好的可擴(kuò)展性,在復(fù)用性上也是優(yōu)勢(shì)明顯。每個(gè)功能模塊一旦定義好統(tǒng)一的接口,就可以被各個(gè)模塊所調(diào)用,而不是為相同的功能進(jìn)行重復(fù)開(kāi)發(fā)。
在業(yè)務(wù)邏輯的設(shè)計(jì)上,考慮到由于大量的重復(fù)性操作,設(shè)計(jì)專門(mén)的數(shù)據(jù)訪問(wèn)服務(wù)件來(lái)簡(jiǎn)化同意類型的操作,減少相同或相似業(yè)務(wù)邏輯對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的重復(fù)代碼編寫(xiě);競(jìng)賽成績(jī)處理系統(tǒng)的業(yè)務(wù)邏輯也不復(fù)雜,包括維護(hù)、解析、下發(fā)和存儲(chǔ)。但由于涉及到的數(shù)據(jù)量大,因此針對(duì)這些業(yè)務(wù)邏輯在設(shè)計(jì)業(yè)務(wù)類時(shí)需要竟可能設(shè)計(jì)小而簡(jiǎn)單的類,避免類中包含過(guò)多的屬性,并簡(jiǎn)化各業(yè)務(wù)類之間的關(guān)系,即遵循“高內(nèi)聚低耦合”的設(shè)計(jì)準(zhǔn)則[1]。競(jìng)賽成績(jī)處理系統(tǒng)的功能模塊較多,業(yè)務(wù)量也比較大,在軟件界面設(shè)計(jì)時(shí)需要針對(duì)各功能模塊設(shè)計(jì)形式簡(jiǎn)潔、層次清晰的窗體,以減少成績(jī)處理操作員的誤操作。
跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件設(shè)計(jì)采用三層體系架構(gòu),即針對(duì)跳水競(jìng)賽成績(jī)處理系統(tǒng)實(shí)現(xiàn)進(jìn)行數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層和表示層的設(shè)計(jì)。
數(shù)據(jù)訪問(wèn)層設(shè)計(jì)使用.NET平臺(tái)下Ado.Net數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)完成數(shù)據(jù)訪問(wèn)服務(wù)組件TAPP[2]。該組件提供給應(yīng)用程序用于數(shù)據(jù)庫(kù)連接,執(zhí)行查詢語(yǔ)句或執(zhí)行過(guò)程,檢索結(jié)果等數(shù)據(jù)庫(kù)操作所需要的類和接口。業(yè)務(wù)邏輯層通過(guò)調(diào)用這些類和接口可以直接實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)操作。后臺(tái)數(shù)據(jù)是競(jìng)賽系統(tǒng)的寶貴財(cái)產(chǎn),安全性是一個(gè)非常重要的問(wèn)題。三層結(jié)構(gòu)將業(yè)務(wù)邏輯數(shù)據(jù)通過(guò)中間層和客戶分離,保障了業(yè)務(wù)數(shù)據(jù)的安全性[3]。
業(yè)務(wù)邏輯層主要設(shè)計(jì)實(shí)現(xiàn)對(duì)比賽基礎(chǔ)數(shù)據(jù)、,報(bào)名報(bào)項(xiàng)數(shù)據(jù)等的維護(hù),對(duì)排名獎(jiǎng)牌數(shù)據(jù)等的現(xiàn)實(shí),以及比賽安排數(shù)據(jù),賽時(shí)數(shù)據(jù)等的對(duì)外交換等。其中對(duì)數(shù)據(jù)維護(hù)的實(shí)現(xiàn)是建立在數(shù)據(jù)庫(kù)訪問(wèn)的基礎(chǔ)上,完成數(shù)據(jù)的添加,刪除,修改等操作;對(duì)數(shù)據(jù)顯示的實(shí)現(xiàn)也是建立在數(shù)據(jù)庫(kù)訪問(wèn)的基礎(chǔ)上,通過(guò)預(yù)定義的控制操作完成;對(duì)外數(shù)據(jù)交換的實(shí)現(xiàn)則通過(guò)數(shù)據(jù)的接口在雙方約定接口協(xié)議下完成。
表示層的設(shè)計(jì)目標(biāo)是針對(duì)各業(yè)務(wù)功能在系統(tǒng)主窗口下進(jìn)行對(duì)應(yīng)的義務(wù)功能窗口人機(jī)交互界面設(shè)計(jì)。在窗體形式、操作命令層次等細(xì)節(jié)上進(jìn)行詳細(xì)的設(shè)計(jì),以富有觀賞性和操作性的人機(jī)交互界面滿足系統(tǒng)的設(shè)計(jì)需求。
采用三層體系結(jié)構(gòu),將跳水競(jìng)賽業(yè)務(wù)邏輯和數(shù)據(jù)的存儲(chǔ)顯示等訪問(wèn)操作分離,極大地提高了系統(tǒng)靈活性,實(shí)現(xiàn)低耦合[4],所有的業(yè)務(wù)模塊都將獨(dú)立,遇到不同的比賽、競(jìng)賽需求的改變,不必對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行改動(dòng),只需對(duì)所影響的業(yè)務(wù)邏輯進(jìn)行改變,不會(huì)對(duì)其他功能模塊產(chǎn)生影響,便于項(xiàng)目的二次開(kāi)發(fā)。
本設(shè)計(jì)中使用的三層體系架構(gòu)如圖3所示。
圖3 三層體系架構(gòu)
基于以上研究,跳水競(jìng)賽成績(jī)處理系統(tǒng)的軟件設(shè)計(jì)在三層體系架構(gòu)下,各功能模塊的應(yīng)用包括:
(1)數(shù)據(jù)訪問(wèn)層應(yīng)用
首先,根據(jù)業(yè)務(wù)需求,編寫(xiě)具體的數(shù)據(jù)訪問(wèn)公共服務(wù)類,包括數(shù)據(jù)庫(kù)增、刪、改、查等功能的TDB類。TDB類中提供了一種根據(jù)業(yè)務(wù)需求從數(shù)據(jù)井里面一層層提取所需數(shù)據(jù)、減少業(yè)務(wù)邏輯層重復(fù)數(shù)據(jù)篩選工作。接著,創(chuàng)建一個(gè)組件類,在組件類里,創(chuàng)建應(yīng)用程序?qū)ο?,這樣在表示層進(jìn)行具體操作時(shí),可以通過(guò)這個(gè)對(duì)象來(lái)實(shí)現(xiàn)這些數(shù)據(jù)訪問(wèn)公共服務(wù)類所完成的功能。
(2)業(yè)務(wù)邏輯層應(yīng)用
根據(jù)跳水項(xiàng)目的業(yè)務(wù)邏輯,編寫(xiě)具體的跳水業(yè)務(wù)邏輯類,如報(bào)名報(bào)項(xiàng)類 TRegcomp、成績(jī)處理類TRegCompResult,TJumpResult,TRoundResult。TJumpResult類里面包含了跳水運(yùn)動(dòng)員每一跳成績(jī)的計(jì)算和排名方法及其相關(guān)操作,而TRoundResult類里面則包含了每一輪成績(jī)所相關(guān)的業(yè)務(wù)邏輯處理方法。在基礎(chǔ)數(shù)據(jù)方面,則根據(jù)業(yè)務(wù)邏輯創(chuàng)建TAthlete,TDelegation,TRound,TSportItem 類。這些類都對(duì)應(yīng)了數(shù)據(jù)庫(kù)中一張具體的數(shù)據(jù)表,所以,在編寫(xiě)類時(shí),首先根據(jù)數(shù)據(jù)表中的字段定義類成員變量,然后根據(jù)數(shù)據(jù)訪問(wèn)層返回的信息,構(gòu)造類對(duì)象,并且把新構(gòu)造的類添加到一個(gè)全局List對(duì)象中,方便程序的數(shù)據(jù)操作。
(3)表示層應(yīng)用
首先,由基類Office2007Form創(chuàng)建軟件主窗體MainForm,設(shè)置窗口標(biāo)題等信息,加載各功能模塊界面和功能按鈕。接著,由TInfo基類創(chuàng)建各功能模塊業(yè)務(wù)類,包括由基類創(chuàng)建基礎(chǔ)數(shù)據(jù)模塊業(yè)務(wù)類、報(bào)名報(bào)項(xiàng)業(yè)務(wù)類、賽事計(jì)劃業(yè)務(wù)類、賽事成績(jī)管理業(yè)務(wù)類和報(bào)表管理模塊業(yè)務(wù)類,編寫(xiě)構(gòu)造函數(shù)和一次性初始化函數(shù) Override Doinit()。然后,針對(duì)各功能模塊創(chuàng)建業(yè)務(wù)主窗口,即賽事計(jì)劃主窗體、運(yùn)動(dòng)員信息主窗體、代表團(tuán)信息主窗體、報(bào)名報(bào)項(xiàng)主窗體、賽事管理主窗體、賽事報(bào)表主窗體,并設(shè)置各自窗體的控件。在各功能模塊業(yè)務(wù)主窗體代碼中重載主窗體初始化函數(shù)。在主窗體Load事件中加載各功能模塊業(yè)務(wù)類對(duì)象,在各對(duì)象按鈕中激活業(yè)務(wù)對(duì)象主窗體。然后在各功能模塊業(yè)務(wù)類中編寫(xiě)各功能模塊的業(yè)務(wù)函數(shù)。業(yè)務(wù)函數(shù)與界面對(duì)象無(wú)關(guān),數(shù)據(jù)依靠參數(shù)進(jìn)行傳遞與交換,通常是數(shù)據(jù)庫(kù)讀寫(xiě)、排名、排序、判罰等操作。完成數(shù)據(jù)讀寫(xiě)后,通常要進(jìn)行業(yè)務(wù)數(shù)據(jù)集的刷新操作。完成業(yè)務(wù)數(shù)據(jù)函數(shù)編寫(xiě)后,在各業(yè)務(wù)功能模塊窗口中創(chuàng)建業(yè)務(wù)處理窗口,設(shè)置好所需的窗口控件。編寫(xiě)業(yè)務(wù)處理窗口代碼。業(yè)務(wù)窗口的驅(qū)動(dòng)代碼在業(yè)務(wù)類中完成,主要包括創(chuàng)建業(yè)務(wù)窗口對(duì)象實(shí)例,設(shè)置業(yè)務(wù)窗口模式,設(shè)置業(yè)務(wù)處理窗口的DataView對(duì)象,調(diào)用業(yè)務(wù)處理窗體的DoReFresh()方法等。在業(yè)務(wù)主窗體中通過(guò)調(diào)用業(yè)務(wù)窗體驅(qū)動(dòng)函數(shù)或編寫(xiě)業(yè)務(wù)處理代碼實(shí)現(xiàn)各功能模塊的業(yè)務(wù)功能。
跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件設(shè)計(jì)流程如圖4所示。
圖4 跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件流程
跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件主界面如圖5所示。
圖5 跳水競(jìng)賽成績(jī)處理系統(tǒng)軟件主界面
根據(jù)目前體育競(jìng)賽信息系統(tǒng)現(xiàn)狀,針對(duì)跳水比賽需要,提出了跳水競(jìng)賽成績(jī)處理信息系統(tǒng)的設(shè)計(jì)方案。該方案在軟件體系設(shè)計(jì)上采用三層體系架構(gòu),將跳水競(jìng)賽業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)顯示等訪問(wèn)操作分離,極大地提高了系統(tǒng)的靈活性。根據(jù)系統(tǒng)實(shí)際需要,進(jìn)行了數(shù)據(jù)庫(kù)設(shè)計(jì),并根據(jù)業(yè)務(wù)分類,方便了操作及賽事實(shí)時(shí)成績(jī)的存取,完全滿足競(jìng)賽需求。
[1]殷泰暉.C#編程從基礎(chǔ)到實(shí)踐[J].北京:電子工業(yè)出版社,2007,6.
[2]李紅芹.基于三層架構(gòu)的.NET數(shù)據(jù)庫(kù)業(yè)務(wù)系統(tǒng)開(kāi)發(fā)[J].計(jì)算機(jī)與現(xiàn)代化,2009(10):120 -125.
[3]趙明亮.淺談三層架構(gòu)[J].科學(xué)與財(cái)富,2011(7):224-224.
[4]湯永華.基于三層體系架構(gòu)的圖紙分發(fā)管理系統(tǒng)的開(kāi)發(fā)[J].梅山科技,2009(6):18-23.