999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

網(wǎng)站開(kāi)發(fā)的五層構(gòu)架模塊化設(shè)計(jì)

2013-04-29 00:44:03鐘志東孟清
計(jì)算機(jī)時(shí)代 2013年8期

鐘志東 孟清

摘 要: 網(wǎng)站項(xiàng)目設(shè)計(jì)一般根據(jù)項(xiàng)目規(guī)模、安全要求和團(tuán)隊(duì)工作方式等分別采用不同層次的設(shè)計(jì)構(gòu)架,常用的構(gòu)架有二層模型和三層模型。文章通過(guò)ASP.NET4.0(C#)介紹五層構(gòu)架模塊化網(wǎng)站設(shè)計(jì)方法。從系統(tǒng)的安全性和技術(shù)層面把系統(tǒng)橫向分解為五層構(gòu)架模式,再?gòu)臉I(yè)務(wù)功能考慮把系統(tǒng)縱向分塊,使得技術(shù)層次更加分明,模塊耦合度更低,模塊可重用性更高。五層構(gòu)架模塊化設(shè)計(jì)把業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)嚴(yán)格與界面分開(kāi),系統(tǒng)安全得到保障,這是網(wǎng)站項(xiàng)目開(kāi)發(fā)的理想構(gòu)架模型。

關(guān)鍵詞: 網(wǎng)站項(xiàng)目設(shè)計(jì); 五層構(gòu)架; 模塊耦合度; 可重用性; 系統(tǒng)安全

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)08-19-03

0 引言

在ASP.NET網(wǎng)站項(xiàng)目設(shè)計(jì)中,常用的系統(tǒng)構(gòu)架模式為二層架構(gòu)和三層架構(gòu)[1],如圖1和圖2所示。安全性要求比較高的系統(tǒng)項(xiàng)目一般都基于三層架構(gòu)方式開(kāi)發(fā)。

圖1的開(kāi)發(fā)模式只適應(yīng)于SQLServer數(shù)據(jù)庫(kù)的開(kāi)發(fā),在這種模式中直接通過(guò)界面層的數(shù)據(jù)綁定控件調(diào)用SqlDataSource數(shù)據(jù)源,再由數(shù)據(jù)源建立數(shù)據(jù)庫(kù)連接,并直接執(zhí)行數(shù)據(jù)庫(kù)的查詢語(yǔ)句或存儲(chǔ)過(guò)程來(lái)操作數(shù)據(jù)庫(kù)的數(shù)據(jù)(即增、刪、改和檢索操作),編程比較簡(jiǎn)潔。其缺點(diǎn)是完全依賴于SQLServer數(shù)據(jù)庫(kù),直接在界面層執(zhí)行查詢語(yǔ)句系統(tǒng)安全性較差,也不利于團(tuán)隊(duì)開(kāi)發(fā)的分工協(xié)作。這種模式只適應(yīng)于小型項(xiàng)目的開(kāi)發(fā)。

圖2的開(kāi)發(fā)模式由界面層的數(shù)據(jù)綁定控件直接調(diào)用業(yè)務(wù)實(shí)體類。這種模式雖然比使用SqlDataSource數(shù)據(jù)源模式復(fù)雜得多,但其具有很大的靈活性,它結(jié)合ADO.NET技術(shù)實(shí)現(xiàn)對(duì)來(lái)自不同的數(shù)據(jù)庫(kù)或數(shù)據(jù)文件的數(shù)據(jù)進(jìn)行處理,在團(tuán)隊(duì)開(kāi)發(fā)的項(xiàng)目中被普遍采用。

三層構(gòu)架的擴(kuò)展如圖3所示[2],把中間邏輯層進(jìn)一步拆分為三層,構(gòu)成五層構(gòu)架模式。五層構(gòu)架模型從系統(tǒng)安全和技術(shù)層面把業(yè)務(wù)邏輯層進(jìn)一步拆分為數(shù)據(jù)傳遞層、數(shù)據(jù)轉(zhuǎn)換層和執(zhí)行查詢語(yǔ)句對(duì)象層,把業(yè)務(wù)邏輯嚴(yán)格與用戶界面隔離開(kāi)來(lái),以保障業(yè)務(wù)邏輯和數(shù)據(jù)的安全性。再?gòu)臉I(yè)務(wù)功能出發(fā)橫向分割,使系統(tǒng)更加細(xì)化、模塊化和標(biāo)準(zhǔn)化。把軟件開(kāi)發(fā)過(guò)程設(shè)計(jì)成標(biāo)準(zhǔn)的組裝作業(yè)流程,技術(shù)層次分明,利于團(tuán)隊(duì)各個(gè)技術(shù)能力層次的分工協(xié)作。第一層次由掌握網(wǎng)頁(yè)前端技術(shù)的技術(shù)人員承擔(dān),第二層次可由初級(jí)程序人員承擔(dān),第三層次由比較有經(jīng)驗(yàn)的高級(jí)程序人員承擔(dān),第四層次可引用標(biāo)準(zhǔn)的ADO.NET技術(shù)封裝靜態(tài)類,第五層次由比較有經(jīng)驗(yàn)的數(shù)據(jù)庫(kù)技術(shù)人員承擔(dān)。

本文通過(guò)一個(gè)供應(yīng)鏈管理信息系統(tǒng)項(xiàng)目的開(kāi)發(fā)過(guò)程來(lái)展現(xiàn)五層構(gòu)架模式的設(shè)計(jì)方法和技術(shù)特點(diǎn)。五層構(gòu)架設(shè)計(jì)一般按照業(yè)務(wù)功能劃分模塊,在同一業(yè)務(wù)模塊再按構(gòu)架層次劃分模塊,對(duì)整個(gè)系統(tǒng)功能從縱向和橫向進(jìn)行切割。

1 用戶界面設(shè)計(jì)

用戶界面網(wǎng)頁(yè)的樣式和布局等技術(shù)這里不作介紹,著重介紹網(wǎng)頁(yè)文件的數(shù)據(jù)提交和接受的技術(shù)方法[3-4]。圖4所示是一個(gè)采購(gòu)單的輸入界面,當(dāng)采購(gòu)單明細(xì)信息的商品數(shù)量輸入并回車(chē)時(shí)將顯示輸入的所有明細(xì)數(shù)據(jù)記錄,單擊 “確認(rèn)”按鈕則生成一張采購(gòu)單。

給出本網(wǎng)頁(yè)的部分代碼如下:

//實(shí)例化采購(gòu)功能的數(shù)據(jù)傳遞類

ESCM.BLL.PurchaseManage bll=new ESCM.BLL.PurchaseManage();

//實(shí)例化采購(gòu)功能的屬性類

ESCM.Model.PurchaseManage model=new

ESCM.Model.PurchaseManage ();

//GridView數(shù)據(jù)綁定

int editIndex=-1;

//執(zhí)行DBAccess靜態(tài)分裝類的ExecuteScalar方法獲取臨時(shí)表的最大行記錄

object idno=DBAccess.ExecuteScalar(DBAccess.strConn,

CommandType.Text, "Select MAX(IdNo) From DetailTemp");

//獲取GridView編輯行

if (idno!=DBNull.Value) {

editIndex=Convert.ToInt32(idno)-1;

}

else {

//調(diào)用DBAccess靜態(tài)分裝類的ExecuteNonQuery方法,執(zhí)行查詢語(yǔ)句,在臨時(shí)表中插入空記錄

DBAccess.ExecuteNonQuery(DBAccess.strConn,

CommandType.Text, "Insert Into DetailTemp(WareName)

Values('')");

editIndex=0;

}

//把臨時(shí)表記錄綁定到GridView并設(shè)置編輯行

gvDetailTemp.DataSource=DBAccess.ExecuteDataset

(DBAccess.strConn, CommandType.Text, "Select * From

DetailTemp");

gvDetailTemp.EditIndex=editIndex;

gvDetailTemp.DataBind();

//采購(gòu)單添加按鈕事件方法代碼,把界面輸入的數(shù)據(jù)傳遞給屬性類對(duì)象

model.SupplierNo=Convert.ToInt32(ddlSupplier.SelectedValue);

model.SupplierFormNo=tbSupplierFormNo.Text.ToString();

model.Buyer=tbBuyer.Text.ToString();

model.PayState=rbPayState.SelectedValue;

model.Maker=lbMaker.Text.ToString();

model.Remark=tbRemark.Text.ToString();

model.PurchaseDate=Convert.ToDateTime

(tbPurchaseDate.Text.ToString());

//執(zhí)行接受數(shù)據(jù)對(duì)象的方法

bll.Add(model);

本段代碼展示了用戶界面如何傳遞和接受數(shù)據(jù)的過(guò)程。網(wǎng)頁(yè)事件方法通過(guò)數(shù)據(jù)控件把相關(guān)數(shù)據(jù)傳遞給數(shù)據(jù)傳遞層的model對(duì)象,而model對(duì)象則作為bll對(duì)象的參數(shù)。

2 數(shù)據(jù)傳遞層對(duì)象

在數(shù)據(jù)傳遞層中包含兩個(gè)用戶自定義類[5],一個(gè)是ESCM.Model.PurchaseManage類,這是一個(gè)屬性類,該類只包含屬性成員,屬性成員與采購(gòu)管理功能模塊基礎(chǔ)數(shù)據(jù)表的字段相對(duì)應(yīng),其部分代碼如下:

namespace ESCM.Model

{ public class PurchaseManage

{ public int PurchaseNo {set; get;} //采購(gòu)單編號(hào)

public string Buyer {set; get;} //采購(gòu)員

public string Maker {set; get;} //制單人

public string PayState {set; get;} //付款狀態(tài)

public DateTime PurchaseDate {set; get;} //制單日期

public decimal PurchasePrice {set; get;} //訂購(gòu)價(jià)

…… //其他方法省略

}

}

另一個(gè)ESCM.BLL.PurchaseManage類是數(shù)據(jù)傳遞類,通過(guò)屬性類對(duì)象作為方法參數(shù)傳遞數(shù)據(jù),每個(gè)方法體只包含一條語(yǔ)句,即調(diào)用數(shù)據(jù)轉(zhuǎn)換對(duì)象的相應(yīng)方法的語(yǔ)句。由它把用戶界面數(shù)據(jù)傳遞給數(shù)據(jù)轉(zhuǎn)換對(duì)象,其部分代碼如下:

namespace ESCM.BLL

{ public class PurchaseManagement

{ //實(shí)例化采購(gòu)管理模塊功能的數(shù)據(jù)轉(zhuǎn)換類

ESCM.DAL.PurchaseManagement dal=new ESCM.DAL

.PurchaseManagement();

//增加采購(gòu)單信息

public int Add(ESCM.Model.PurchaseManagement model)

{ return dal.Add(model);

}

…… //其他方法省略

}

}

3 數(shù)據(jù)轉(zhuǎn)換層對(duì)象

數(shù)據(jù)轉(zhuǎn)換層的任務(wù)是把用戶界面?zhèn)鬟f過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)庫(kù)查詢語(yǔ)句相匹配的參數(shù),并指定要被執(zhí)行的查詢語(yǔ)句。這一層次的對(duì)象還有另外一個(gè)重要的角色,就是要承擔(dān)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程難于應(yīng)對(duì)的復(fù)雜業(yè)務(wù)邏輯,如隊(duì)列管理等。其部分代碼如下:

namespace ESCM.DAL

{ public class PurchaseManagement

{ //增加采購(gòu)單信息

public int Add(ESCM.Model.PurchaseManagement model)

{ //把model對(duì)象相關(guān)成員屬性轉(zhuǎn)換為Object數(shù)組元素

Object[] paramValures=new object[] { model.SupplierNo,

model.SupplierFormNo,

model.Buyer,

model.PayState,

model.Maker,

model.Remark,

model.PurchaseDate

};

//調(diào)用DBAccess靜態(tài)封裝類的ExecuteNonQuery方法執(zhí)行存儲(chǔ)過(guò)程

object obj=DBAccess.ExecuteNonQuery (DBAccess

.strConn, "ProPurchaseFormAdd", paramValures);

}

…… //其他方法省略

}

}

4 執(zhí)行查詢語(yǔ)句層對(duì)象

本層的對(duì)象是一個(gè)通過(guò)ADO.NET技術(shù)執(zhí)行各種查詢語(yǔ)句的類,可設(shè)計(jì)為標(biāo)準(zhǔn)的靜態(tài)封裝類,被所有功能模塊引用,更進(jìn)一步地被所有項(xiàng)目引用[6]。該類包含一系列的靜態(tài)重載方法來(lái)執(zhí)行各種各樣的查詢語(yǔ)句。微軟提供了標(biāo)準(zhǔn)的封裝類文件sqlhelper.cs,可在網(wǎng)上下載,在此不作贅述。

也可在對(duì)安全性要求不高且重用性較低的編碼中,為了簡(jiǎn)化編程,直接在界面層調(diào)用本封裝類,如本文網(wǎng)頁(yè)代碼中所給出的對(duì)臨時(shí)表的操作一樣。

5 數(shù)據(jù)庫(kù)設(shè)計(jì)

良好的數(shù)據(jù)庫(kù)設(shè)計(jì)其基本標(biāo)準(zhǔn)是基礎(chǔ)數(shù)據(jù)表盡可能避免重復(fù)字段,基礎(chǔ)數(shù)據(jù)表要建立必要的關(guān)聯(lián)約束和索引,用視圖組織查詢字段,用存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)據(jù)的增、刪、改和檢索操作。

6 結(jié)束語(yǔ)

本文以商務(wù)網(wǎng)站系統(tǒng)中采購(gòu)單信息輸入功能為例,探討了網(wǎng)站開(kāi)發(fā)中的五層構(gòu)架模塊化設(shè)計(jì)方法。只要掌握了本功能的設(shè)計(jì),就可以此類推,掌握整個(gè)系統(tǒng)的五層構(gòu)架模塊化設(shè)計(jì)方法。

五層構(gòu)架模式是三層構(gòu)架的擴(kuò)展,在網(wǎng)站項(xiàng)目開(kāi)發(fā)中具有如下突出的優(yōu)點(diǎn):

⑴ 代碼安全性比較高,具體的業(yè)務(wù)邏輯和數(shù)據(jù)處理遠(yuǎn)離界面層,系統(tǒng)不易受到攻擊;

⑵ 構(gòu)架層次與技術(shù)層次緊密相關(guān),技術(shù)層次界線分明,比較易于開(kāi)發(fā)團(tuán)隊(duì)的各個(gè)技術(shù)層級(jí)的工作分工與協(xié)作;

⑶ 按技術(shù)層面和業(yè)務(wù)功能劃分模塊,系統(tǒng)耦合性比較低;

⑷ 代碼重用性比較高,設(shè)計(jì)的中間業(yè)務(wù)層類很容易引用到其他的類似項(xiàng)目中;

⑸ 類方法技巧的重用性比較高,在一個(gè)業(yè)務(wù)功能模塊比較好的設(shè)計(jì)方法可以直接引用到另一個(gè)功能模塊中;

⑹ 每個(gè)過(guò)程技術(shù)分明,關(guān)聯(lián)性明確,易于標(biāo)準(zhǔn)化設(shè)計(jì)。

五層構(gòu)架模塊化系統(tǒng)設(shè)計(jì)不僅適用于網(wǎng)站項(xiàng)目的開(kāi)發(fā),也適用于所有管理信息系統(tǒng)項(xiàng)目的開(kāi)發(fā)。

參考文獻(xiàn):

[1] 戴上平,丁士鋒等.ASP.NET3.5完全自學(xué)手冊(cè)[M].機(jī)械工業(yè)出版社,2009.

[2] 鐘志東.趙中文等.ASP.NET 4(C#)項(xiàng)目開(kāi)發(fā)教程——面向工作過(guò)程[M].北京航空航天大學(xué)出版社,2011.

[3] 溪江華.圣殿祭司的ASP.NET2.0開(kāi)發(fā)詳解[M].電子工業(yè)出版社,2006.

[4] 馬偉.ASP.NET 4權(quán)威指南[M].機(jī)械工業(yè)出版社,2011.

[5] 周禮.C#和.NET3.0第一步[M].清華大學(xué)出版社,2008.

[6] 微軟.Sqlhelper類[DB/OL].百度百科.

主站蜘蛛池模板: 最新午夜男女福利片视频| 中文字幕有乳无码| 91原创视频在线| 看国产毛片| 91在线日韩在线播放| 国产人人射| 九九久久精品免费观看| 三级欧美在线| 9久久伊人精品综合| 黄色网页在线观看| 欧美亚洲国产视频| 99精品在线看| 波多野结衣中文字幕一区二区| 热99精品视频| 久久久久久高潮白浆| 天堂亚洲网| 亚洲国产精品成人久久综合影院| 美女毛片在线| 美女扒开下面流白浆在线试听| 久久黄色小视频| 日韩精品无码免费一区二区三区| 婷婷六月综合| 亚洲av色吊丝无码| 毛片一区二区在线看| 无码高清专区| 免费无码一区二区| 亚洲欧美日韩天堂| 亚洲AⅤ波多系列中文字幕| 丁香综合在线| 亚洲国产欧美自拍| 久久a毛片| 99re66精品视频在线观看| 视频一区视频二区中文精品| a亚洲视频| 久久久久亚洲av成人网人人软件| 国禁国产you女视频网站| 亚洲天堂精品在线观看| 成年人免费国产视频| 国产 在线视频无码| 精品福利国产| 欧美天堂久久| 国产成人精品优优av| 玖玖免费视频在线观看| 手机在线看片不卡中文字幕| 日本一本在线视频| 精品久久久久无码| 亚洲精品人成网线在线 | 亚洲精品视频免费| 久久综合伊人77777| 免费在线成人网| 国产男人天堂| 国产91成人| 国产精品一区在线观看你懂的| 五月天久久婷婷| 亚洲大学生视频在线播放| 中国一级特黄视频| 欧美成人一级| 找国产毛片看| 亚洲无码高清视频在线观看| 色综合久久久久8天国| 波多野衣结在线精品二区| 亚洲成人精品| 九九视频在线免费观看| 国产99在线观看| 在线看片免费人成视久网下载| 日韩天堂视频| 婷婷色丁香综合激情| 97国产精品视频人人做人人爱| 亚洲中文字幕日产无码2021| 又粗又大又爽又紧免费视频| 波多野结衣国产精品| 美女无遮挡被啪啪到高潮免费| 9999在线视频| 毛片网站观看| 99久久精品免费看国产免费软件 | 亚洲日产2021三区在线| 久久www视频| 国产剧情一区二区| 国产白浆视频| 激情国产精品一区| 欧美日韩福利| 福利姬国产精品一区在线|