呂浩志
(西南林業(yè)大學 林學院,云南 昆明655024)
軟件開發(fā)過程中,為了減少基礎代碼,提高開發(fā)效率,就需要一個好的開發(fā)框架。
Mvc(model-view-controller)是目前軟件開發(fā)中廣泛采用的一種設計模式。它把一個Web應用分離為模型、視圖和控制器三個部分,使得系統(tǒng)結構清晰,利于維護和擴展。
DWZ實現(xiàn)了CSS和JS代碼徹底分離,修改樣式方便,與ASP.NET MVC整合實現(xiàn)Web應用程序的快速開發(fā)。
NHibernate不僅僅管理.NET類到數(shù)據(jù)庫表的映射(包括.NET數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,大幅度減少我們開發(fā)時人工使用SQL和ADO.NET處理數(shù)據(jù)的時間。
軟件開發(fā)總體架構對應的Web請求處理流程如圖1所示,大致步驟如下:
圖1 Web請求流程
(1)用戶提交Web請求
(2)路由模塊將請求信息發(fā)送給相應的控制器,由控制器決定如何處理請求;
(3)控制器根據(jù)請求處理邏輯,調用持久化類中相應的操作;
(4)根據(jù)實際需求,完成數(shù)據(jù)的查詢或存儲、更新;
(5)返回查詢的結果表或視圖;
(6)NHibernate將表或視圖映射成相應的對象并賦值給Modle;
(7)Model將業(yè)務請求的結果返回給控制器;
(8)控制器組織處理信息,調用視圖解析從模型返回的數(shù)據(jù);
(9)DWZ完成頁面渲染,返還數(shù)據(jù)給瀏覽器。
下面以一個項目的實例片斷詳細介紹DWZ、NHibernate與ASP.NET MVC 3框架的整合。
打開Microsoft Visual Studio 2010,新建一個MVC項目。在新建的MVC項目中添加DWZ初始化文件(dwz.frag.xml)、Content文件夾中添加DWZ樣式和Scripts文件夾中添加DWZ腳本庫。
在新建的MVC項目中添加以下引用:Castle.Core.dll,Iesi.Collections.dll,log4net.dll,LinFu.DynamicProxy.dll,NHibernate.ByteCode.Castle.dll,NHibernate.ByteCode.LinFu.dll,NHibernate.dll,并添加數(shù)據(jù)庫映射配置信息文件h.cfg.xml,如下所示:
2.2.1 navTab中的局部分頁
視圖中的分頁控制代碼如下:
其中第一個fflt;optionffgt;的value="@ViewData["NumPerPage"]"表示每頁顯示的條數(shù),@ViewData["Total"]表示總共多少條,@ViewData["currentPage"]表示當前的頁碼,這些都是通過ViewBag將控制器中的參數(shù)傳遞給視圖。以下是控制中的代碼:
var pageIndex=pageNum.HasValue?pageNum.Value-1:0;
var pageSize=numPerPage.HasValueffamp;ffamp;numPerPage.Valueffgt;0?numPerPage.Value:5;
int allCount=vrecordlistDao.count(whereString);
int pageNo=pageIndex+1;
CalPage calPage=new CalPage(allCount,pageSize,pageNo);
IListfflt;Vrecordlistffgt; list= vrecordlistDao.findByPage(calPage,whereString);
ViewBag.Total=allCount;
ViewBag.NumPerPage=pageSize;
ViewBag.currentPage=pageNo;
其中count(whereString)是獲取總條數(shù),findByPage(calPage,whereString)返回分頁數(shù)據(jù),calPage分頁的參數(shù)。
圖2 分頁效果圖
2.2.2 局部Div刷新
以下是主頁面中的表單:fflt;form method="post"action=""onsubmit="return
validateCallback(this,refreshBoxAjaxDone);"ffgt;fflt;/formffgt;表單提交后根據(jù)Json傳遞的參數(shù),執(zhí)行refreshBoxAjaxDone()進行局部刷新。自定義的JavaScript局部刷新函數(shù)如下:
后臺返回的Json如下:Json({statusCode="200",message="保存成功",navTabId="",rel="rel",forwardUrl=url,callbackType=""},JsonRequestBehavior.AllowGet);其中$('#'+json.rel)是用Jquery找到局部Div在主頁面中的位置,然后重新加載forwardUrl達到刷新的目的。
2.3.1 數(shù)據(jù)庫映射配置信息文件
在Global.asax中初始化數(shù)據(jù)庫映射配置信息文件NHibernateUtils.SessionFactory.init
(Server.MapPath("~/h.cfg.xml"));以下是SessionFactory.cs類中的對象和方法:
//初始化配置文件
2.3.2 數(shù)據(jù)庫的添加操作
}
2.3.3 數(shù)據(jù)庫的更新操作
2.3.4 數(shù)據(jù)庫的刪除操作
應用DWZ、NHibernate和ASP.NET MVC 3架構來進行Web應用的開發(fā),不僅降低了程序開發(fā)難度,而且利于程序的維護和擴展。本文通過總結實際項目開發(fā)中的部分經驗,希望通過上文介紹能讓讀者對DWZ、NHibernate和ASP.NET MVC 3架構的應用有所了解。
[1]DWZ富客戶端框架使用手冊[S].
[2]趙廣利.基于NHibernate的數(shù)據(jù)持久化方案[J].計算機工程,2009,35(20).
[3]姚渝濤.開源框架DWZ與ASP.NET MVC3的整合應用[J].電腦編程技巧與維護,2012(17)