隨著計算機網絡技術的迅速發展,Web應用系統越發變得日益廣泛起來。ASP.NET是微軟推出的新一代Web開發平台,與其它web開發技術相比,ASP.NET提供的Web頁面級狀態管理功能、服務器控件觸發事件的工作模式、代碼和內容分離的編程方式等?[1],在一定程度上改變了以往的we b 應用系統的架構模式。在軟件開發技術方面,面向對象技術和軟件分層結構設計是代碼組織的一些好方法。但是對於具體的開發平台而言,多層結構有著不同的具體表現;對於具體的項目開發而言,面向對象技術對具體問題進行類定義和對象劃分也不相同。因此,如何基於ASP.NET這些新技術在ASP.Net平台上應用面向對象技術架構一個邏輯清晰、模塊合理的多層結構的Web應用系統就成了文中討論的內容。下面以筆者曾參與的《實驗室信息管理系統》中的“ 論文管理子系統” 為例,來闡述基於四層架構的設計思想。
1 ASP.Net下Web程序架構
系統描述:學生可以登記自己的論文,也可以刪除自己登記的論文和相關所有回復;老師和學生可以查看、回復論文,也可以刪除、修改自己的回復;管理員可以查看、刪除登記的所有論文和回復。筆者省略了論文管理系統的使用案例圖和使用案例事件流圖??[2,3],只給出了修改自己回復案例的時序圖(見圖1)。對於基於ASP.Net的Web應用系統,用戶直接面對的是客戶端浏覽器,用戶在使用系統時的請求是通過HTTP協議傳遞給服務器端的ASPX頁面,用戶操作的事務邏輯處理和數據的邏輯運算由服務器與數據庫系統共同完成。按照在系統中的用途分類,把負責系統與角色交互的對象稱為邊界類對象,把負責系統中訪問數據庫的對象稱為實體對象,把系統中介於邊界對象和實體對象之間,負責時序圖中流程的對象稱為控制對象。故在時序圖(見圖1)中,Papers.ASPX和 Session對象屬於邊界類對象,Users對象屬於控制類對象,Reply對象屬於實體類對象。
1.1 ASP.Net下Web應用表示層的架構
表示層是用戶和軟件交互的接口,對於Web程序設計而言就是基於Html的界面。主要職責就是為用戶提供信息,以及把用戶的操作傳送給邏輯層和數據處理層。從使用案例事件流圖中,可以確定用於交互的頁面個數,再從案例時序圖中,可以確定用於和用戶交互的頁面和服務器端的ASPX頁面關系。圖2是修改自己回復案例用到的頁面關系圖。
Papers(View)頁面對應用戶查看某篇論文的頁面,Papers(Edit)頁面對應用戶查看自己回復的頁面。從案例時序圖中可以得知它們都是Papers服務器頁面在兩個不同狀態下產生的頁面。為了克服傳統Web窗體頁本身無狀態這一固有限制,ASP.NET頁框架提供了一種“視圖狀態”(vIEw state)的功能,此功能會在往返行程之間自動保留頁以及頁上所有控件的屬性值,ASP.NET這種特性為數據表現層設計提供了極大的便利。ASP.NET還 采用了由服務器控件引發的事件的工作方式。Web窗體控件事件模型要求在客戶端捕獲事件信息,並且通過HTTP發送將事件消息傳輸到服務器,框架再解釋該發送以確定所發生的事件,然後在要處理該事件的服務器上調代碼中的適當方法。通過上面的兩項技術ASP.Net框架提供了可以創建傳統客戶端/服務器Web交互的抽象模型,使開發者能夠使用支持快速應用程序開發(RAD)和面向對象編程 (OOP)的傳統方法和工具來進行應用程序編程。因此,可以根據角色與系統交互的事件流圖和頁面關系圖來架構ASP.Net下Web表示層:
(1) 從頁面關系圖出發,確定系統中用到的主要功能界面。
(2) 根據ASP.Net中Web控件的特點,對確定的功能界面進行可視化頁面布局:
(3) 從事件流圖出發,確定功能頁面之間以及頁面狀態之間轉移邏輯關系,根據ASP.Net中Web頁面級狀態管理功能和服務器控件屬性、事件編程模式,編寫部分頁面之間以及頁面狀態之間轉移代碼。
在NET開發工具中,可以使用“所見即所得” 頁面設計工具對整個頁面進行可視化布局,在實現這些頁面之間以及頁面狀態之間轉移邏輯關系代碼時,可以在Web窗體設計器“設計” 視圖中, 通過修改對象屬性或編寫事件完成頁面的邏輯關系代碼。
1.2 ASP.Net下Web業務邏輯層的架構
業務邏輯層是整個Web應用系統信息和邏輯處理中心,在時序圖中反應為由負責時序圖流程的控制對象構成。業務邏輯層也是聯系Web應用系統表示層和數據存儲訪問層的紐帶,因此Web業務邏輯層在整個系統的架構中至關重要。從案例時序圖中,可以確定控制對象以及控制對象與其它對象所需提供的服務。圖3是“修改自己回復”案例的時序圖中的users控制對象的類圖。由於ASP.NET提供了一種所謂的後台代碼,可用於分離用戶界面和邏輯代碼,而 ASP.NET本身也完全支持基於模塊與組件開發,因此,為采用面向對象的技術架構邏輯層提供支持,可以從系統用例圖和時序圖出發在ASP.Net下架構Web業務邏輯層:
(1) 大多數 Web 應用系統都是屬於信息管理系統,所以控制對象可以按照使用系統的角色進行劃分控制類。
(2) 從案例時序圖出發,確定控制對象所需的功能。
(3) 采用.Net組件方式包裝 Web業務邏輯層中的功能,從而使邏輯層和表示層在物理上分開。
在.Net開發工具中,可以采用“類”文件的方式實現Web業務邏輯層中的組件,在工程項目中可以采用添加引用的方式把“類”文件引入Web工程中,這樣Web業務邏輯層的功能就可以以對象的方式在應用Web系統的開發過程中使用。
1.3 ASP.Net下Web數據訪問層架構
數據訪問層作為業務邏輯層訪問數據存儲層的數據訪問接口,其主要職責是為數據存儲層進行抽象封裝,使數據存儲層從業務邏輯層看來能完全透明。從案例時序圖可以確定實體對象、實體對象的屬性及實體對象為控制對象所需提供的服務。圖4是“修改自己回復”案例的時序圖中“Replys”實體對象的類圖。點管理機制系統。它按照對等網絡中節點的網絡特性對節點進行分組,分組內節點按照傳輸性能進行分層,通過賦予網絡自組織、自適應的功能來增強組播系統的傳輸性能。在一個大的對等網絡中,節點根據分組標准自主形成中小規模的組播群,數據傳輸主要集中在組內進行。組內管理采用動態集中式控制,主節點掌握了組播組內成員的全局信息節點通過彼此交換信息動態調整組內位置,使得分組內的數據傳輸性能最優化,從而加強了整個網絡的性能。另一方面,由於采取了分組的機制,服務器僅需維護分組信息即可而不用管理所有節點,節點的加入、管理和數據傳輸等完全由節點間P2P完成,極大地減輕了服務器的負擔,提高了可服務的節點數目。采用這種節點分組、組內分層的節點自組織管理機制,能夠調整各節點在對等網絡中的位置, 滿足異構網絡中各節點所處的不同網絡環境。通過組內動態調整,使得輸出帶寬大的節點處於分組的頂端位置,加快數據的分發從而提高多播的效率以減少數據延時。采取這種上層以tree與下層以mesh為主體的混合結構,極大地增強了網絡的魯棒性。當網絡條件變化時,整個網絡會隨之動態調整。如新節點的退出或失效不會導致轉發路徑的斷裂,轉發路徑具有自我修復、自我最優化的能力。因此,這種節點管理機制可以應用於大型文件的共享、流媒體等多種場合。
在實際的應用中,面對復雜的網絡環境,如何較為准確地判斷節點間的網絡距離,進一步強化分組算法和組內管理算法,還有很多工作要做,這是在未來的工作中重點研究的內容。
1.4 ASP.Net下Web數據存儲層架構
數據存儲層的主要功能是把數據訪問層的數據處理功能轉換為具體的數據庫或文件操作。從案例時序圖中,可以確定實體對象以及實體類型的屬性。實體類中的每個屬性可以與數據庫中的字段相對應,即每個實體類可以與數據庫中的一張表對應。因此,在ASP.Net的Web應用系統中,可以通過System.Data.OLEDB命名空間或 System.Data.SQL ClIEnt??[4,5] 命名空間中的數據庫訪問和控制類型構造與具體數據庫相適應的類。在數據存儲層對實體對象的屬性和服務的訪問中,可以通過這個類完成對數據庫的訪問和控制。
2 結論
采用四層架構的思想,並運用UML的對象特點進行類的劃分的架構設計,使得代碼編寫邏輯清晰,易於管理和維護,並且具有很好的代碼的可重用性、適用性、易維護性和可移植性。四層架構的編寫完全可以由四組人員同時進行,這樣代碼的維護管理上就更加清晰,並且可以縮短開發周期。但是同時進行的四層代碼編寫,需要有良好的前期的需求分析的支持。只有完備的需求分析(例如:使程序設計人員都清楚項目所包含或者項目中需要的類名和功能名稱,當項目統一使用的時候,就不會因為名稱不統一導致引用錯誤等問題),才可能真正實現四層架構的並行設計。