摘 要:為了有效改善系統(tǒng)的結(jié)構(gòu),降低系統(tǒng)開發(fā)復(fù)雜度,提出了以現(xiàn)有開源框架為基礎(chǔ)的輕量集成框架,該框架以Spring.Net為核心,與ASP.NET MVC、NHibernate框架進(jìn)行整合,以多層次結(jié)構(gòu)劃分系統(tǒng),從而實(shí)現(xiàn)應(yīng)用程序的動(dòng)態(tài)構(gòu)建,減少系統(tǒng)的復(fù)雜度,確保系統(tǒng)的可擴(kuò)展性和可維護(hù)性。對(duì)該框架進(jìn)行了技術(shù)性分析,實(shí)驗(yàn)結(jié)果表明了該框架的可行性及有效性。
關(guān)鍵詞:輕量框架;Spring.NET;電子商城;NHibernate
中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
近幾年來,隨著科學(xué)技術(shù)的不斷發(fā)展,計(jì)算機(jī)應(yīng)用日益普及,人們對(duì)應(yīng)用軟件的需求日益增大。軟件規(guī)模越來越大,其代碼設(shè)計(jì)越是復(fù)雜??蛻舻男枨笸鶑?fù)雜而多變,在需求分析階段初期,客戶對(duì)自己的業(yè)務(wù)模型,并不一定完全熟悉,只能給出一個(gè)模糊而抽象的業(yè)務(wù)需求模型。當(dāng)客戶發(fā)現(xiàn)軟件的功能并非自己所需的時(shí)候,則需要對(duì)軟件進(jìn)行修改和擴(kuò)展,從而加大軟件的開發(fā)難度及成本。
為了滿足用戶復(fù)雜多變的需求,軟件的動(dòng)態(tài)性越趨重要。軟件的動(dòng)態(tài)性體現(xiàn)在軟件的靈活性和可擴(kuò)展性上。當(dāng)需要對(duì)軟件進(jìn)行更改和擴(kuò)展的時(shí)候,能夠在原有系統(tǒng)基礎(chǔ)上較輕松的修改,且盡可能小的影響原有系統(tǒng)。為此,軟件程序應(yīng)該具備良好的分層結(jié)構(gòu),降低程序模塊之間的耦合,增加擴(kuò)展的靈活性,同時(shí)軟件需要能夠提供動(dòng)態(tài)替換機(jī)制以及可插入機(jī)制的能力。本文以電子商城為例,提出了以現(xiàn)有開源框架為基礎(chǔ)的輕量集成框架,用來解決系統(tǒng)集成中普遍存在著的擴(kuò)展性、適應(yīng)性問題[1]。
2 電子商城系統(tǒng)框架(Electronic shop system
framework)
以Spring.Net為核心來構(gòu)建電子商城系統(tǒng),以三層架構(gòu)為基礎(chǔ),整合Asp.Net MVC以及Nibernate,構(gòu)建基于Web的電子商城系統(tǒng)輕量級(jí)集成框架,同時(shí)以RESTful風(fēng)格設(shè)計(jì)網(wǎng)絡(luò)訪問,在一定程度上提高SEO優(yōu)化效果。
2.1 框架簡介
(1)分層體系結(jié)構(gòu)
在目前的軟件設(shè)計(jì)架構(gòu)中,三層架構(gòu)是比較常見的一種分層式結(jié)構(gòu),即數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層、表示層這三層,同時(shí)還有一個(gè)模型層(Model)。數(shù)據(jù)訪問層用于訪問數(shù)據(jù)存儲(chǔ)系統(tǒng),控制數(shù)據(jù)訪問邏輯,為業(yè)務(wù)邏輯層提供服務(wù)。而業(yè)務(wù)邏輯層則負(fù)責(zé)封裝各種業(yè)務(wù)邏輯,數(shù)據(jù)校驗(yàn)等。而最上層的則是表現(xiàn)層,將數(shù)據(jù)以人性化的方式展現(xiàn)給用戶。而模型則負(fù)責(zé)在各層傳遞數(shù)據(jù)。
(2)Asp.Net MVC框架
Asp.net MVC框架通過Controller、View、Model這三者來處理用戶的請(qǐng)求以及展示數(shù)據(jù)。整個(gè)框架通過使用Asp.net MVC代替?zhèn)鹘y(tǒng)WebForms,可以減少框架復(fù)雜度,避免了WebForm中大量的ViewState而導(dǎo)致頁面文件變得過于臃腫,從而減少了帶寬的壓力,增加測(cè)試的可行性,使得框架更加輕量化。
(3)Nhiberate框架
NHibernate是一個(gè)基于.NET的針對(duì)關(guān)系型數(shù)據(jù)庫的對(duì)象持久化類庫,與直接使用ADO.NET操作SQL來執(zhí)行數(shù)據(jù)庫的邏輯操作相比,NHibernate更能夠大量減少開發(fā)以及維護(hù)的成本。NHibernate通過XML文件描述,建立對(duì)象與關(guān)系模型數(shù)據(jù)(表或視圖)之間的映射,以面向?qū)ο蟮木幊趟枷雭韺?shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問邏輯,從而可以提高開發(fā)效率,減少低級(jí)錯(cuò)誤的產(chǎn)生。當(dāng)對(duì)象需要持久化時(shí)候,則會(huì)通過框架來生成對(duì)應(yīng)的SQL語句,同時(shí)由框架來維護(hù)事務(wù)會(huì)話,使得開發(fā)更加簡便。由于不直接與數(shù)據(jù)庫交互,從而使得程序擁有更好的可擴(kuò)展性和可維護(hù)性。
(4)Spring.Net框架
Spring.NET是基于.NET之上的應(yīng)用程序框架,也是java第三方框架Spring的.Net版本。Spring.NET主體是IOC和AOP[2]。IOC全稱為Inversion of Control,叫控制反轉(zhuǎn),一般也稱其為依賴注入,它改變了傳統(tǒng)在程序中強(qiáng)制聲明對(duì)象的創(chuàng)建方法[3]。通過IOC,模塊與模塊之間的依賴,只需依賴其暴露出的接口,而具體的實(shí)現(xiàn)有IOC容器來管理,通過配置文件指向具體的實(shí)現(xiàn)便可以讓被調(diào)用方的具體實(shí)現(xiàn)注入的調(diào)用方,最終降低軟件模塊之間的耦合度,控制模塊之間的調(diào)用,降低軟件開發(fā)的工作量,提高軟件應(yīng)用效率。AOP全稱為Aspect-Oriented Programming,面向切面的編程,它能夠分解系統(tǒng)服務(wù)功能,分離出重復(fù)或者次要的部分使其模塊化,并對(duì)其提供聲明式的系統(tǒng)服務(wù)方式。典型的使用方式一般包含了方法調(diào)用的日志記錄,異常的處理,事務(wù)的控制等,這一些都是最容易重復(fù)產(chǎn)生部分,通過AOP將其抽出,從而使得代碼更加簡潔,減少后續(xù)開發(fā)與維護(hù)的成本。
2.2 框架系統(tǒng)結(jié)構(gòu)
基于Spring.Net的電子商城系統(tǒng)框架,以三層架構(gòu)為基礎(chǔ),以Spring.Net為核心,銜接Asp.Net MVC和Nibernate,通過IOC控制各層的具體依賴,以AOP分解系統(tǒng)的服務(wù),如圖1所示。
圖1 系統(tǒng)框架
Fig.1 System framework
2.3 技術(shù)可行性分析
表現(xiàn)層采用ASP.NET MVC框架實(shí)現(xiàn),通過Spring提供的IOC機(jī)制,與業(yè)務(wù)邏輯層所交互,使得表現(xiàn)層與業(yè)務(wù)邏輯層相解耦。業(yè)務(wù)邏輯層,由表現(xiàn)層所調(diào)用,通過上層請(qǐng)求訪問,結(jié)合數(shù)據(jù)訪問層所提供的服務(wù),進(jìn)行相對(duì)應(yīng)的邏輯驗(yàn)證,運(yùn)算等操作,最后反饋信息。通過AOP服務(wù),抽取封裝日志記錄,異常處理,事務(wù)控制等,從而到達(dá)分解系統(tǒng)服務(wù)功能,避免重復(fù)的開發(fā)。數(shù)據(jù)訪問層,由NHibernate框架實(shí)現(xiàn),與關(guān)系數(shù)據(jù)庫建立映射,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)庫,與Spring.Net結(jié)合,封裝事務(wù)處理機(jī)制,大大減少系統(tǒng)構(gòu)建的復(fù)雜度;內(nèi)置的緩存機(jī)制,大大提高數(shù)據(jù)訪問的效率以及可靠性。通過NHibernate可以方便切換不同的DBMS,提高整體可維護(hù)性與可擴(kuò)展性。綜上所述,該框架在技術(shù)上可行。
3 示例分析(Example analysis)
以電子商城系統(tǒng)為例,使用本文所述框架來實(shí)現(xiàn)電子商城系統(tǒng)的開發(fā)。
3.1 基礎(chǔ)架構(gòu)
以三層架構(gòu)為基礎(chǔ),構(gòu)建系統(tǒng)的初始化架構(gòu),劃分為三層,數(shù)據(jù)訪問層,業(yè)務(wù)邏輯層以及Web層,如圖2所示。
圖2 基礎(chǔ)架構(gòu)
Fig.2 Infrastructure
(1)數(shù)據(jù)訪問層
IDAL項(xiàng)目:數(shù)據(jù)訪問邏輯接口層;DAL項(xiàng)目:數(shù)據(jù)訪問邏輯的實(shí)現(xiàn)層,采用Nhibernate框架實(shí)現(xiàn)。
(2)業(yè)務(wù)邏輯層
IBLL:業(yè)務(wù)操作接口層;BLL:業(yè)務(wù)邏輯實(shí)現(xiàn)層。
(3)表現(xiàn)層
Web:頁面表現(xiàn)層,采用ASP.NET MVC框架搭建。
Entity層,貫穿三層,用于數(shù)據(jù)的傳輸和共享,持久化等。Config層,存放一些Spring.net相關(guān)的IOC和AOP配置。
3.2 數(shù)據(jù)訪問層
基于NHibernate實(shí)現(xiàn),通過XML描述方式,建立對(duì)象與數(shù)據(jù)庫表之間的關(guān)系,以商品表為例,相關(guān)配置代碼示例如下所示:
……
3.3 業(yè)務(wù)邏輯層
這一層系統(tǒng)業(yè)務(wù)核心價(jià)值所在之處,同樣將具體的業(yè)務(wù)定義(IBLL)與實(shí)現(xiàn)分離(BLL)。對(duì)數(shù)據(jù)訪問層的依賴,只依賴其接口,通過Spring.Net注入相應(yīng)的配置。業(yè)務(wù)實(shí)現(xiàn)類中,只需依賴接口,通過XML注入具體的實(shí)現(xiàn),先注冊(cè)實(shí)現(xiàn)類,代碼如下:
再通過配置,為業(yè)務(wù)實(shí)現(xiàn)類注入具體的數(shù)據(jù)訪問實(shí)現(xiàn)。
3.4 Web表現(xiàn)層
表現(xiàn)層依賴業(yè)務(wù)邏輯層的接口,由Spring.net提供實(shí)現(xiàn)的注入。表現(xiàn)層中的View展示數(shù)據(jù),交互之時(shí),由Controller來控制數(shù)據(jù)的流向。而Web項(xiàng)目中,處于層次的最頂端,需要做最后的配置,即提供Spring.Net管理的入口。通過在Web.config中配置,將Asp.NET MVC的控制器,以及數(shù)據(jù)訪問層,業(yè)務(wù)邏輯層的相關(guān)實(shí)現(xiàn)由Spring.NET來統(tǒng)一管理。
在Web.config中先配置一個(gè)Spring節(jié)點(diǎn),然后配置相應(yīng)的組件定義以及依賴關(guān)系,指向?qū)?yīng)的文件。
4 結(jié)論(Conclusion)
本文結(jié)合電子商城系統(tǒng)開發(fā)實(shí)例,通過第三方框架Spring.Net和NHibernate,采用ASP.NET構(gòu)建三層應(yīng)用程序,把應(yīng)用程序進(jìn)行分拆,使得程序結(jié)構(gòu)更加清晰,降低其復(fù)雜度,從而使程序擁有更高的可擴(kuò)展性和可維護(hù)性。
后續(xù)工作主要是更好的完善整個(gè)輕量級(jí)框架,探討和設(shè)計(jì)一套簡便的配置管理與集成的解決方案,同時(shí)在本框架的基礎(chǔ)上創(chuàng)建能夠簡便應(yīng)用于電子商城的功能組件,最終降低系統(tǒng)復(fù)雜度以及達(dá)到開發(fā)集成與測(cè)試的技術(shù)要求。
參考文獻(xiàn)(References)
[1] 張紅光,蔣躍軍,左玉龍.基于消息傳遞的企業(yè)信息系統(tǒng)集成
框架研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(12):3219-3221.
[2] 劉艷.利用Spring.Net構(gòu)建動(dòng)態(tài)的三層應(yīng)用程序框架[J].硅谷
Silicon Valley,2013,(14):31.
[3] 林慶.基于ASP.NET的MVC設(shè)計(jì)模式的研究[J].計(jì)算機(jī)工程
與設(shè)計(jì),2008(1):167-169.
作者簡介:
林平榮(1981-),男,碩士,講師.研究領(lǐng)域:軟件工程.