摘 要:為了增加軟件的結構性和可重用性,引入了三層結構軟件開發模式。介紹了基于ASP.NET三層結構軟件開發中涉及的相關概念和實現原理,詳細闡述了針對不同數據庫,通過工廠模式實現數據訪問層的具體過程,這也是文章的突出重點;對于業務邏輯層和表示層,提出了一些通用的觀點,開發人員可以根據具體的需求進一步擴展完善。最后總結這種開發模式的優缺點和適用性。實踐證明,三層結構的開發模式對軟件開發具有重要的應用價值。
關鍵詞:ASP.NET;設計模式;三層結構;可重用性
中圖分類號:TP311文獻標識碼:B
文章編號:1004-373X(2010)06-058-03
Research and Development of Three-layer Architecture Software Based on ASP.NET
CHEN Youliang1,SHENG Kejun2,WANG Yangyang3
(1.China Academy of Safety Science and Technology,Beijing,100029,China;2.Yantai Wanhua Group,Yantai,264002,China;
3.Henan University,Kaifeng,475001,China)
Abstract:The model of three-layer architecture is introduced in order to improve the architecture and reusage of software.The relevant concept and implementation principle of three-layer architecture software development based on ASP.NET,implementation of data access layer for different type of database by the way of factory model,which is the outstanding emphasis are introduced,some common viewpoints for business logic layer and user interface layer are brought forward,the developer can extend and perfect the project by different requirements.The advantages,shortcomings and applicability of the development pattern are concluded in the end.Practice has proved the model of three-layer architecture is very valuable to software development in the field of practical application.
Keywords:ASP.NET;design pattern;three-layer architecture;reusage
0 引 言
隨著互聯網應用軟件的發展以及組件技術的出現,軟件體系結構逐漸從原C/S結構方式向更適合互聯網應用的B/S結構模式轉變,兩層的C/S結構也逐漸轉向三層或多層結構[1]。軟件的應用環境在不斷變化,用戶對軟件系統的要求也越來越高,由此基于傳統的軟件開發模式開發的軟件系統存在一些問題。三層體系結構是在客戶端與數據庫之間加入了一個中間層,也叫組件層。這里所說的三層體系,不是指物理上的三層,不是簡單地放置三臺機器就是三層體系結構,三層是指邏輯上的三層,即使這三個層放置到一臺機器上[2]。三層體系的應用程序將業務規則、數據訪問、合法性校驗等工作放到了中間層進行處理。通常情況下,客戶端不直接與數據庫進行交互,而是通過對象組件模型(Component Object Model,COM)/分布式對象組件模型(Distributed Component Object Model,DCOM)[3]與中間層建立連接,再經由中間層與數據庫進行交互[4]。這種方式在一定程度上改變了軟件開發的模式,提高了軟件系統的可用性、穩定性和兼容性。
1 ASP.NET三層結構概述
Microsoft.NET Framework 是微軟推出的一套開發平臺。ASP.NET可以使用.NET平臺來快速方便地部署三層架構。ADO.NET 的數據庫訪問基礎是.NET數據供應器( Data Provider)[5]。顯示層放在顯示頁面中,數據庫操作和邏輯層用組件來實現,這樣就能很方便地實現三層架構。在ASP.NET 2.0中,典型的三層架構包括表示層(即頁面及后臺代碼)、業務邏輯層(即業務接口、業務實體、業務邏輯)和數據訪問層[6]。三層架構示意圖如圖1所示。
數據訪問層 主要是對原始數據的操作,具體來說是為業務邏輯層或表示層提供數據服務。在實現的時候要保證“數據訪問層”中函數功能的原子性。
業務邏輯層 主要負責對數據層的操作,也就是說把一些數據層的操作進行組合。其目的是將“數據訪問層”的基礎存儲邏輯組合起來,形成一種業務規則。
表示層 指應用程序中實現的客戶端。用戶服務主要是Web客戶端和Windows客戶端,也可以是其他平臺應用程序,主要作用是對用戶的請求接受,以及數據的返回,為客戶端提供應用程序的訪問。
圖1 三層架構示意圖
2 具體解決方案
2.1 數據訪問層
在數據訪問層中,完全采用“面向對象接口編程”思想[7],以使用創建型設計模式中的工廠模式為主,根據一個工廠類傳入的參量決定創建出哪一類產品類的實例[8]。抽象出來的數據庫訪問模塊,脫離了與具體數據庫的依賴,從而使得整個數據庫訪問層利用數據庫遷移。由于數據庫類型的不同,對數據庫的操作也有所不同,代碼因此也會有所區別。具體類庫結構圖如圖2所示。
圖2 數據訪問層結構圖
在圖2中,所有的類和方法都放在工廠DBAccessFactory中,通過接口IDBAccess向外提供服務(見表1)。在工廠DBAccessFactory中,最高層靜態父類IDBAccess包含了一些基本方法;抽象類DBAccess繼承類IDBAccess,定義了一些常用變量和公用的抽象和實例。對于不同的數據庫,定義一個不同的類,這些類繼承類DBAccess,并根據不同數據庫實例化了父類的抽象方法,同時該類還包含了針對不同數據庫的個性方法。部分類的部分變量和方法描述如表1~表3所示。
表1 接口IDBAccess
變量或者方法描述
DBType DBType獲取枚舉的數據庫類型
void Open()打開數據庫連接
void Close()關閉數據庫連接
int RunNoQuery(string strCmd);執行SQL語句
DataTable RunQuery(string strCmd);根據sql條件語句獲取結果集
表2 類DBAccess
變量或者方法描述
protected DbConnectionm_oConn數據庫連接對象
protected conststring CON_strServer數據庫服務器地址或者名稱
protected conststring CON_strUser數據庫用戶名
public abstract void InitConn(string strServer,string strDataBase,string strUser,string strPwd)初始化數據庫
public abstract DbCommandGetCmd(string strCmd)獲取DbCommand對象
public string GetParameter(string parameter)根據條件獲取參數
表3 類Oracle
變量或者方法描述
變量或者方法描述
public OracleTransaction tranOracle事務變量
public override void InitConn(string strServer,string strDataBase,string strUser,string strPwd)實例化數據庫連接
public void TranBegin()開始事務
public void TranRunSql(string str_Sql)執行事務
public void TranEnd()結束事務
SQL類、DB2類和MySQL三個類中的變量和方法類似于Oracle類,在此不再詳述。
2.2 業務邏輯層
業務邏輯層的核心模塊包含了整個系統的核心業務。在業務邏輯層中,不能直接訪問數據庫,而必須通過數據訪問層。業務邏輯層將表示層提出的請求轉換為對數據訪問層的請求,并將數據服務層返回的結果提交給表示層。對數據訪問業務的調用是通過接口IDBAccess完成的。既然與具體的數據訪問邏輯無關,則層與層之間的關系是松散耦合的。如果此時需要修改數據訪問層的具體實現,只要不涉及到接口定義,那么業務邏輯層就不會受到任何影響。例如,在應急救援系統中,用于處理業務邏輯和分析的功能模塊有應急資源調度模塊、應急預案管理模塊、報警方案形成模塊、報警通知模塊等;網上購物系統的庫存管理、物流管理、客戶關系管理和客戶訂單管理都可以放在業務邏輯層中實現。業務邏輯層包含了業務對象本身以及應用于它們的規則。這也是主要業務對象所在的位置。它們實現業務實體或系統對象。系統的業務規則將在這些對象中編碼,即從表示層接收請求,根據編碼的業務規則處理請求,從數據訪問層獲取數據或將數據發送到數據訪問層,將處理結果傳遞回表示層。部分處理方法描述如表4所示。
表4 部分處理方法描述
業務邏輯方法描述
Thread fThread_dealAllMobilTel報警方式中,處理短信報警線程
Thread fThread_dealTelPhone報警方式中,處理電話尋呼報警線程
Thread fThread_dealBroadcast報警方式中,處理廣播群呼報警線程
Thread fThread_alarmSendStatus報警狀態結果顯示線程
對系統功能的擴展,主要是指在業務邏輯層中增加各種業務處理與分析邏輯的應用,業務對象的實現,則使用C#的標準類庫,建立數據存取對象,并根據ASP.NET 2.0提供的接口標準予以編寫,從而實現系統結構化。
2.3 表示層
表示層是三層結構中用戶與系統的交互層,設計中最重要的模式是模型-視圖-控制器(Model-View-Controller,MVC)模式。在.NET平臺下,不需要自己去實現MVC模式。就視圖對象而言,ASP.NET已經提供了常用的控件,非常方便,也可以通過繼承System.Web.UI.UserControl,自定義用戶控件,并利用頁面組合控件來實現視圖。表示層的設計與實現均遵循以下特點:要有方便、友好的客戶交互界面。
3 三層架構給系統的優點
(1) 結構清晰、耦合度低。
采用三層結構將表示層和業務邏輯層分離[9]。客戶端和應用服務器、應用服務器和數據庫服務器之間的通信可以通過中間件或者相關程序來實現。當數據庫或者應用服務器的業務邏輯改變時,客戶端并不需要改變,反之亦然,從而大大提高了系統模塊的復用性,降低了維護費用。
(2) 便于系統擴展。
模塊化使得系統很容易在縱向和水平兩個方向拓展。一方面可以將系統升級為更大、更有力的平臺;另一方面還可以適當增加規模,以增強系統的網絡應用。
(3) 利于開發任務同步進行。
大型的軟件系統開發過程中,一個好的分層式結構,可以使開發人員的分工更加明確。一旦定義好各層次之間的接口,負責不同邏輯設計的開發人員就可以各司其職,同步開發。這樣就可以開發進度迅速提高。
4 結 語
基于ASP.NET三層架構的軟件開發已經成為一種流行的開發模式,也帶來了很多開發上的優點,適合開發應用需求靈活的系統,一定程度上保證了系統的可擴展性和可移植性。當然三層架構軟件開發模式也有一定的缺點。例如,相對于非分層的應用程序,執行速度不夠快,不適合對執行速度要求高的系統[10]。實踐證明,多層架構開發模式的應用是一條比較好的軟件系統開發途徑。
參考文獻
[1]黃啟春.基于CORBA的三層B/S結構[J].計算機與現代化,2002(4):36-39.
[2]e800技術客..NET三層架構技術.http://tech.e800.com.cn,2009.
[3]Jin Huang.Internet/CORBA-based Multi-agent System for Tele.Design and Manufacturing,ICAMT′99[C].1999.
[4]AfritXia.淺談“三層結構”原理與用意.http://blog.csdn.net/allthesky,2006.
[5]華國棟,劉文予.基于ADO.NET的數據庫訪問及其性能優化[J].計算機工程與應用,2004(6):215-218.
[6]沈軍.基于ASP.NET 2.0 技術的Web 數據庫多層架構設計與實現[J].電子測量技術,2008(2):25-28.
[7]張英剛.Microsoft.NET PetShop 4.0 架構與技術分析.http://blog.csdn.net/PrideRock,2008.
[8]談冉,陳巍,薛勝軍.設計模式在典型.NET三層架構Web 程序中的應用[J].武漢理工大學學報,2006(2):344-346.
[9][美]Erich Gamma.設計模式[M].李英軍,譯.北京:機械工業出版社,2000.
[10].NET三層架構 .http://www.cnblogs.com/gaoweipeng/archive/2009/01/18/1377855.html,2009.