摘 要:本文結(jié)合鐵路工程概預(yù)算軟件項(xiàng)目的實(shí)例,闡述了對N層體系架構(gòu)技術(shù)的理解,并通過分析具體的項(xiàng)目特點(diǎn),詳細(xì)地表述了如何設(shè)計(jì)一個可以靈活部署為單臺計(jì)算機(jī)應(yīng)用模式、企業(yè)局域網(wǎng)應(yīng)用模式、Internet應(yīng)用模式的分布式應(yīng)用系統(tǒng)的體系結(jié)構(gòu)設(shè)計(jì)方案。
關(guān)鍵詞:鐵路概預(yù)算;軟件系統(tǒng)設(shè)計(jì);N層體系結(jié)構(gòu);Web服務(wù);分布式應(yīng)用程序;應(yīng)用程序部署
中圖分類號:TP311.52;U215.1 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2018)02-0022-03
The Application Architecture Design of Budgetary Estimation of Railway Engineering
ZHANG Chi
(Dalian JiYi Logistics Co.,Ltd.,Dalian 116601,China)
Abstract:In this article,via a software project of budgetary estimation of railway engineering,the author describes the understanding of the technique of N-tire architecture. By analyzing the characteristic of the concrete project,the author illustrates how to make a system architecture design plan of a distributed software application,in which explained that the application can be deployed flexibly by a single desktop mode,or by an enterprise intranet mode,or by the internet mode.
Keywords:budgetary estimation of railway engineering;software system design;N-Tier;Web service;distributed application;application deployment
引 言
隨著計(jì)算機(jī)科學(xué)技術(shù)的不斷發(fā)展,軟件的規(guī)模和應(yīng)用領(lǐng)域迅速擴(kuò)大,造成了軟件程度的復(fù)雜度不斷加大,所以高效地開發(fā)出高質(zhì)量的軟件產(chǎn)品越來越困難,于是軟件開發(fā)人員開始關(guān)注如何找到理解軟件的更好途徑和探討是否存在更好的途徑來構(gòu)造復(fù)雜的大型軟件系統(tǒng)。為此,作為基層的計(jì)算機(jī)技術(shù)人員,我們對手頭的工作項(xiàng)目進(jìn)行了深入的思考。下面,結(jié)合我們在鐵路概預(yù)算軟件開發(fā)過程中的體會,就如何用N層體系結(jié)構(gòu)來設(shè)計(jì)該項(xiàng)目的系統(tǒng)結(jié)構(gòu),進(jìn)行簡單介紹。
1 N層體系結(jié)構(gòu)簡介
設(shè)計(jì)和數(shù)據(jù)庫相關(guān)的軟件系統(tǒng),總逃不開在如何確定系統(tǒng)的體系結(jié)構(gòu)的問題上做出選擇。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,體系結(jié)構(gòu)已經(jīng)從當(dāng)年的不分層,發(fā)展到今天的N層體系結(jié)構(gòu)。軟件的設(shè)計(jì)實(shí)現(xiàn)也從當(dāng)年無規(guī)矩可循的泥沼中,走到今天規(guī)范的高速路上來。
最初的解決方案是不分“層”的,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,數(shù)據(jù)層被分離出來,這樣就形成了一個典型的兩層結(jié)構(gòu)的系統(tǒng)設(shè)計(jì)。在這種架構(gòu)中,數(shù)據(jù)庫系統(tǒng)在后臺存儲和管理數(shù)據(jù),在用戶界面層里,負(fù)責(zé)進(jìn)行業(yè)務(wù)邏輯的處理和表示。雖然在大多數(shù)情況下,這些已經(jīng)足夠解決問題了,但仍存在著一些缺陷,如由于客戶端包含了業(yè)務(wù)邏輯,業(yè)務(wù)邏輯一改,所有客戶端都要升級等。由此,三層架構(gòu)出現(xiàn)了,業(yè)務(wù)邏輯層被從客戶端分離出來,并被部署在一臺服務(wù)器上,客戶端簡單到只是IE瀏覽器。這樣,便彌補(bǔ)了兩層架構(gòu)的缺陷。但對于需要在復(fù)雜客戶端操作的軟件系統(tǒng),這么“瘦”的客戶端顯然是不能滿足需求的,所以客戶端必須是復(fù)雜的應(yīng)用程序界面,那么,業(yè)務(wù)邏輯又應(yīng)該放到哪里呢?
隨著組件技術(shù)的不斷發(fā)展,N層架構(gòu)出現(xiàn)了,這給上文的提問以多樣的解決方式。N層架構(gòu)還是以三層架構(gòu)為基礎(chǔ)的,只是業(yè)務(wù)邏輯層被劃分得更細(xì),如表示層和業(yè)務(wù)邏輯的接口被從業(yè)務(wù)邏輯層單獨(dú)分離出來,業(yè)務(wù)邏輯和數(shù)據(jù)庫的接口也被從業(yè)務(wù)邏輯層單獨(dú)分離出來,數(shù)據(jù)實(shí)體層被單獨(dú)定義,這樣每層的邏輯更單一,層與層的接口更清晰,而這一切帶來的就是更容易地升級、更簡單地維護(hù)、更靈活地部署。
總結(jié)了這么多的分層方式,可以看出,給出一個設(shè)計(jì)方案是有多種選擇的。采用何種方案的標(biāo)準(zhǔn)是:哪種體系結(jié)構(gòu)的設(shè)計(jì)方案更適合我們的具體項(xiàng)目;適合的標(biāo)準(zhǔn)是:體量合適、效率滿足需要、易于升級、易于維護(hù)、可以靈活部署。
下面以我們的項(xiàng)目為案例,闡述我們的解決方案。
2 鐵路概算軟件的項(xiàng)目特點(diǎn)
設(shè)計(jì)鐵路概算軟件體系結(jié)構(gòu)時,以下方面是必須考慮到的:
2.1 多專業(yè)配合工作
一個工程項(xiàng)目一般包含多個子工程,每個子工程需要多個專業(yè)配合設(shè)計(jì)。比如一個房建工程就涉及房屋、水暖、電力、裝飾、機(jī)械等專業(yè);更大的工程如一個秦沈客運(yùn)專線,就需要多個車站多個區(qū)間的線路工程、橋梁工程、房建工程、信號工程、通信工程等。如此說來,我們面臨這樣一個事務(wù)模型:它是由許多相互關(guān)聯(lián)的子事務(wù)構(gòu)成的,這些子事務(wù)模型共享基礎(chǔ)資源,共享設(shè)計(jì)標(biāo)準(zhǔn),彼此有時序關(guān)聯(lián),互為約束條件。
2.2 多人協(xié)作工作
用戶是軟件設(shè)計(jì)時要考慮的第一要素。一個復(fù)雜的概算項(xiàng)目是由許多角色共同參與、彼此配合來完成的。這在本項(xiàng)目中表現(xiàn)得尤為突出。如,一種典型概算編制的工作模式就是:具體設(shè)計(jì)者完成自己負(fù)責(zé)的個別概算;概算科負(fù)責(zé)配置定額標(biāo)準(zhǔn),設(shè)計(jì)標(biāo)準(zhǔn),并進(jìn)行統(tǒng)計(jì)匯總;項(xiàng)目總負(fù)責(zé)人或總工程師負(fù)責(zé)審核,以及責(zé)令修改。在這種模式中,要由許多有特定權(quán)限的角色共同協(xié)作來完成工作。
2.3 異地并行工作
隨著Internet接入的不斷普及,異地(非公司局域網(wǎng)范圍內(nèi))并行工作成為可能,而這也正符合大型勘查設(shè)計(jì)工作的特點(diǎn)。另一種情況是,概算審查單位(比如上級主管部門、建設(shè)單位)也都處于本單位局域網(wǎng)之外,他們也有要求通過Internet訪問某特定概算的需求。
這些情況,帶來了通過Internet訪問本系統(tǒng)的需求。
2.4 多變的部署規(guī)模
大的設(shè)計(jì)院,一般有幾百個設(shè)計(jì)人員,有幾十個人的工經(jīng)處;中型的設(shè)計(jì)院,有近百個設(shè)計(jì)人員,有十余人的概算科;而眾多小型設(shè)計(jì)所、施工單位,有可能只有一個人,需要在一臺電腦上完成所有操作。
對于這種種需求,在今天飛速發(fā)展的計(jì)算機(jī)技術(shù)面前,其有效實(shí)現(xiàn)都已經(jīng)成為可能。
3 采用的軟件技術(shù)
(1)數(shù)據(jù)庫系統(tǒng)采用了MS SQL Server2008。(2)客戶端采用了MS.Net Windows Application和IE配合使用。(3)服務(wù)端組件的設(shè)計(jì)采用了.Net Managed Component和ASP.NET。(4)Web服務(wù)器采用MS IIS。(5)數(shù)據(jù)交換技術(shù),采用了兩種技術(shù),一是基于SAOP協(xié)議的XML Web Service,它可以穿透防火墻,適于Internet應(yīng)用;二是基于TCP或HTTP協(xié)議,傳送Binary Stream的.Net Remoting,它交換速度更快,適于局域網(wǎng)內(nèi)部應(yīng)用。由于這些技術(shù)不在本文的討論范圍之內(nèi),故不展開討論。
4 我們的鐵路概算軟件的體系結(jié)構(gòu)
基于以上種種考慮,我們的鐵路概預(yù)算軟件的體系結(jié)構(gòu)設(shè)計(jì)共分為六層,如圖1所示,箭頭代表調(diào)用關(guān)系。
4.1 客戶端表示層
該層采用有著豐富表現(xiàn)形式的Windows應(yīng)用程序作為客戶端程序,通過這個界面,可以實(shí)現(xiàn)復(fù)雜的輸入和處理方式,也能更好地利用客戶端的資源,這是IE插件所難以辦到的。
4.2 業(yè)務(wù)邏輯接口層
該層用來將客戶端表示層和業(yè)務(wù)邏輯層隔離。在該層中,主要完成用戶權(quán)限管理工作,只有有權(quán)限的用戶才能存取相應(yīng)的業(yè)務(wù)。同時,在該層中完成界面表示層和業(yè)務(wù)邏輯層之間數(shù)據(jù)格式的轉(zhuǎn)換。該層也為之后靈活地部署提供了條件。
4.3 業(yè)務(wù)邏輯層
該層的功能是比較好理解的——在該層中處理所有定額的管理邏輯、規(guī)則的定義邏輯、概算的計(jì)算邏輯,以及所有數(shù)據(jù)格式的合理性檢查。同時,它又是對多種來自業(yè)務(wù)邏輯接口層的一種歸納抽象,可以降低冗余業(yè)務(wù)邏輯,提高代碼的內(nèi)聚性。
4.4 數(shù)據(jù)接口層
該層的功能很單一,是內(nèi)存中的數(shù)據(jù)集和數(shù)據(jù)庫之間的接口。它只負(fù)責(zé)定額、概算數(shù)據(jù)和數(shù)據(jù)庫之間的交換。它是業(yè)務(wù)邏輯層對數(shù)據(jù)庫的調(diào)用的一種歸納和抽象,能夠大幅度地降低冗余代碼。
4.5 數(shù)據(jù)實(shí)體層
數(shù)據(jù)實(shí)體層是數(shù)據(jù)庫中的實(shí)體在組件中的再定義。為什么要把它單獨(dú)分離出來呢?這是因?yàn)槠渌鲗訌谋举|(zhì)上說都要和數(shù)據(jù)庫對話,業(yè)務(wù)邏輯操縱的業(yè)務(wù)實(shí)體就是數(shù)據(jù)庫中的實(shí)體,而在N層結(jié)構(gòu)中,只有數(shù)據(jù)接口層才能和數(shù)據(jù)庫交流,為此我們創(chuàng)建了數(shù)據(jù)實(shí)體層。從上圖中可以看出,其他各層都要對本層進(jìn)行訪問。同時帶來的好處是,它是數(shù)據(jù)庫中的實(shí)體的所有信息在組件中的映象,它對所有數(shù)據(jù)實(shí)體在組建中建立了強(qiáng)制類型的約束。
4.6 數(shù)據(jù)庫層
數(shù)據(jù)庫層負(fù)責(zé)定額、規(guī)則、概算數(shù)據(jù)的存取。把所有業(yè)務(wù)邏輯從數(shù)據(jù)庫層剔除,當(dāng)然是理想化的,但同時也會使我們不得不放棄數(shù)據(jù)庫管理軟件的強(qiáng)大功能所帶來的好處。為此我們還是利用了數(shù)據(jù)庫提供的關(guān)聯(lián)、索引、約束等手段,同時設(shè)計(jì)了簡明的存儲過程和觸發(fā)器,在提供和數(shù)據(jù)接口層交流的同時,降低業(yè)務(wù)邏輯層的工作量。
5 多層的優(yōu)點(diǎn)
有的讀者可能會問,這么簡單的一個輸入定額、費(fèi)率、再計(jì)算、輸出報表的過程用得著設(shè)計(jì)這么多層嗎?那么,拋下邏輯清晰、便于升級、便于維護(hù)等優(yōu)點(diǎn)不講,下面介紹幾種部署方案,來簡單了解一下N層體系結(jié)構(gòu)設(shè)計(jì)帶來的其他益處。
5.1 簡單的個人版的部署
這類用戶可能只有一臺電腦,需要我們將所有組件都部署在同一臺機(jī)器上。數(shù)據(jù)庫可以安裝SQL Server MSDE,同時簡化用戶管理模塊,使該用戶擁有所有權(quán)限。這樣,該用戶會覺得和使用一個單機(jī)版的軟件沒有區(qū)別。
5.2 一個中大型企業(yè)的部署
圖2是各種組件在一個企業(yè)局域網(wǎng)內(nèi)部的部署:
豎虛線左面的是網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),右面的是各層部署的組件。服務(wù)器集群的作用是均衡網(wǎng)絡(luò)負(fù)載,那么客戶的個數(shù)將只會受到集群的大小的限制。一般情況下,幾百人的企業(yè)有一臺電腦也足夠了。
5.3 面向Internet用戶的部署
圖3是各種組件在一個Internet解決方案中的部署:
從這張圖中可以看出,客戶端可以通過調(diào)用Web Service,在Internet上訪問本系統(tǒng),同樣為了降低海量用戶訪問的壓力,可以設(shè)計(jì)兩個服務(wù)器集群,一個是web服務(wù)器集群,它是一個橋梁,溝通外部世界;另一個集群是組件服務(wù)器集群,用以完成業(yè)務(wù)邏輯處理。兩個集群之間用.Net Remoting連接。
這樣,通過組件的部署與配置,我們的軟件系統(tǒng)已經(jīng)發(fā)展為一個可以在Internet級別上應(yīng)用的大型系統(tǒng),可以為廣大的客戶提供鐵路工程概預(yù)算服務(wù)。
6 結(jié) 論
以上是我們對鐵路概預(yù)算軟件項(xiàng)目設(shè)計(jì)的簡單介紹。通過對N層體系架構(gòu)的理解、對具體項(xiàng)目的分析,闡述了在本項(xiàng)目中,我們對層次的劃分,以及它所帶來的益處。
我們希望能夠?qū)⒐ぷ髦械那猩眢w會進(jìn)行歸納總結(jié),并試圖得出超出具體軟件項(xiàng)目之外的規(guī)律性的東西。希望同行們批評指正,讓我們工程技術(shù)人員一起努力,把最新的計(jì)算機(jī)軟件技術(shù)應(yīng)用到生產(chǎn)實(shí)踐中,讓新興的軟件信息技術(shù)為鐵路建設(shè)事業(yè)服務(wù)。
參考文獻(xiàn):
[1] 李準(zhǔn),王曉剛.鐵路工程概預(yù)算工程數(shù)量自動套用定額系統(tǒng)研究 [J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2014,58(3):141-145.
[2] 陳瑜.基于專家系統(tǒng)的鐵路工程單項(xiàng)概算編制研究 [J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2017,61(1):154-158.
[3] 金強(qiáng).新版鐵路工程概預(yù)算編制辦法與費(fèi)用定額的特點(diǎn)及應(yīng)用 [J].鐵路工程技術(shù)與經(jīng)濟(jì),2017,32(4):13-16.
作者簡介:張弛(1988.03-),男,漢族,遼寧錦州人,本科,助理工程師。主要從事計(jì)算機(jī)應(yīng)用相關(guān)研究。