NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解_第1頁(yè)
NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解_第2頁(yè)
NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解_第3頁(yè)
NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解_第4頁(yè)
NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解(一所謂三層架構(gòu)(3-tier application)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪(fǎng)問(wèn)層(DAL)。區(qū)分層次的目的即為了“高內(nèi)聚、低耦合”的思想。1、表現(xiàn)層(UI):主要是指與用戶(hù)交互的界面,用于顯示數(shù)據(jù)和接受用戶(hù)輸入的數(shù)據(jù),將用戶(hù)輸入的數(shù)據(jù)傳遞給業(yè)務(wù)邏輯層,一般不包含任何實(shí)際的業(yè)務(wù)處理,當(dāng)業(yè)務(wù)邏輯層的數(shù)據(jù)發(fā)生變化時(shí),表示層就會(huì)顯示出更新的結(jié)果。表示層提供應(yīng)用程序的用戶(hù)界面,通常為Windows應(yīng)用程序或Web應(yīng)用程序。2、業(yè)務(wù)邏輯層(BLL):是表示層和數(shù)據(jù)訪(fǎng)問(wèn)層之間的橋梁,它代表應(yīng)用程序

2、的核心功能,負(fù)責(zé)處理數(shù)據(jù)層的數(shù)據(jù),實(shí)現(xiàn)業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層通常為類(lèi)庫(kù)。3、數(shù)據(jù)訪(fǎng)問(wèn)層(DAL):主要實(shí)現(xiàn)對(duì)數(shù)據(jù)的保存和讀取操作,將存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)提交給業(yè)務(wù)層,同時(shí)將業(yè)務(wù)層處理的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。數(shù)據(jù)訪(fǎng)問(wèn)層可以訪(fǎng)問(wèn)關(guān)系數(shù)據(jù)庫(kù)、文本文件或者XML文檔,通常為類(lèi)庫(kù)。三層架構(gòu)對(duì)應(yīng)的圖如下圖所示:為了更好地讓初學(xué)者輕松入門(mén),這里仍然采用趣味性的方式聊一些常用技術(shù)點(diǎn),致力于.NET新手們的快速提高!知識(shí)都是普通的,關(guān)鍵是學(xué)習(xí)的思路。技術(shù)源于生活,技術(shù)原來(lái)可以這樣學(xué)。拋磚引玉而已。層次結(jié)構(gòu)在現(xiàn)實(shí)社會(huì)里隨處可見(jiàn)。記得有個(gè)笑話(huà)講有個(gè)村長(zhǎng)得意地向他老婆吹牛:“全中國(guó)只有四個(gè)人比我官大,鄉(xiāng)長(zhǎng)、縣長(zhǎng)、省長(zhǎng)和國(guó)

3、務(wù)院總理”。這個(gè)笑話(huà)也體現(xiàn)了真實(shí)社會(huì)中分層的現(xiàn)象。社會(huì)人群會(huì)分層,公司人員結(jié)構(gòu)也會(huì)分層,樓房是分層的,甚至做包子的籠屜都是分層的。雖然分層的目的各有不同,但都是為解決某一問(wèn)題而產(chǎn)生的。所以,分層架構(gòu)其實(shí)是為了解決某一問(wèn)題而產(chǎn)生的一種解決方案。1、 常用的三層架構(gòu)設(shè)計(jì)軟件系統(tǒng)最常用的一般會(huì)講到三層架構(gòu),其實(shí)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪(fǎng)問(wèn)層等,有的還要細(xì)一些,通過(guò)分解業(yè)務(wù)細(xì)節(jié),將不同的功能代碼分散開(kāi)來(lái),更利于系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā),同時(shí)為可能的變更提供了更小的單元,十分有利于系統(tǒng)的維護(hù)和擴(kuò)展。常見(jiàn)的三層架構(gòu)基本包括如下幾個(gè)部分,如圖1所示。圖1 常見(jiàn)的三層架構(gòu)* 數(shù)據(jù)訪(fǎng)問(wèn)層DAL:

4、用于實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互和訪(fǎng)問(wèn),從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)或保存數(shù)據(jù)到數(shù)據(jù)庫(kù)的部分。* 業(yè)務(wù)邏輯層BLL:業(yè)務(wù)邏輯層承上啟下,用于對(duì)上下交互的數(shù)據(jù)進(jìn)行邏輯處理,實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。* 表示層Web:主要實(shí)現(xiàn)和用戶(hù)的交互,接收用戶(hù)請(qǐng)求或返回用戶(hù)請(qǐng)求的數(shù)據(jù)結(jié)果的展現(xiàn),而具體的數(shù)據(jù)處理則交給業(yè)務(wù)邏輯層和數(shù)據(jù)訪(fǎng)問(wèn)層去處理。日常開(kāi)發(fā)的很多情況下為了復(fù)用一些共同的東西,會(huì)把一些各層都用的東西抽象出來(lái)。如我們將數(shù)據(jù)對(duì)象實(shí)體和方法分離,以便在多個(gè)層中傳遞,例如稱(chēng)為Model。一些共性的通用輔助類(lèi)和工具方法,如數(shù)據(jù)校驗(yàn)、緩存處理、加解密處理等,為了讓各個(gè)層之間復(fù)用,也單獨(dú)分離出來(lái),作為獨(dú)立的模塊使用,例如稱(chēng)為Common。此時(shí),

5、三層架構(gòu)會(huì)演變?yōu)槿鐖D2所示的情況。圖2 三層架構(gòu)演變結(jié)果*業(yè)務(wù)實(shí)體Model:用于封裝實(shí)體類(lèi)數(shù)據(jù)結(jié)構(gòu),一般用于映射數(shù)據(jù)庫(kù)的數(shù)據(jù)表或視圖,用以描述業(yè)務(wù)中客觀存在的對(duì)象。Model分離出來(lái)是為了更好地解耦,為了更好地發(fā)揮分層的作用,更好地進(jìn)行復(fù)用和擴(kuò)展,增強(qiáng)靈活性。*通用類(lèi)庫(kù)Common:通用的輔助工具類(lèi)。在第5.2節(jié)中我們講過(guò)可以將對(duì)數(shù)據(jù)庫(kù)的共性操作抽象封裝成數(shù)據(jù)操作類(lèi)(例如DbHelperSQL,以便更好地復(fù)用和使代碼簡(jiǎn)潔。數(shù)據(jù)層底層使用通用數(shù)據(jù)庫(kù)操作類(lèi)來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),最后完整的三層架構(gòu)如圖3所示。圖3 最后完整的三層架構(gòu)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)類(lèi)是對(duì)ADO.NET的封裝,封裝了一些常用的重復(fù)的數(shù)據(jù)庫(kù)操作。如

6、微軟的企業(yè)庫(kù)SQLHelper.cs,動(dòng)軟的DBUtility/DbHelperSQL等,為DAL提供訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的輔助工具類(lèi)。通過(guò)以上分析,我們知道如今常用的三層架構(gòu)是個(gè)什么樣子,同時(shí),我們也知道了三層架構(gòu)在使用過(guò)程中的一些演化過(guò)程。那么,為什么要這樣分層,每層結(jié)構(gòu)到底又起什么作用呢?我們繼續(xù)往下看。2、 趣味理解:三層架構(gòu)與養(yǎng)豬看新聞報(bào)道今年豬肉價(jià)格一路高漲,據(jù)說(shuō)有人養(yǎng)豬都發(fā)財(cái)致富奔小康了,程序員都說(shuō)寫(xiě)代碼沒(méi)前途了,還不如去養(yǎng)豬,不過(guò),可別認(rèn)為養(yǎng)豬沒(méi)有技術(shù)含量,比寫(xiě)代碼容易,其實(shí)養(yǎng)豬也大有學(xué)問(wèn)。為了更好地理解三層架構(gòu),就拿養(yǎng)豬來(lái)做個(gè)例子吧。俗話(huà)說(shuō):“沒(méi)吃過(guò)豬肉,還沒(méi)見(jiàn)過(guò)豬跑啊!”。圖4是三層

7、架構(gòu)化的養(yǎng)豬產(chǎn)業(yè)流水線(xiàn)趣味對(duì)此圖。圖4 三層結(jié)構(gòu)與養(yǎng)豬對(duì)比圖3與圖4,我們可以看出:* 數(shù)據(jù)庫(kù)好比豬圈,所有的豬有序地按區(qū)域或編號(hào),存放在不同的豬欄里。* DAL好比是屠宰場(chǎng),把豬從豬圈取出來(lái)進(jìn)行(處理屠殺,按要求取出相應(yīng)的部位(字段,或者進(jìn)行歸類(lèi)整理(統(tǒng)計(jì),形成整箱的豬肉(數(shù)據(jù)集,傳送給食品加工廠(BLL。本來(lái)這里都是同一伙人既管抓豬,又管殺豬的,后來(lái)覺(jué)得效率太低了,就讓一部分人出來(lái)專(zhuān)管抓豬了(DBUtility,根據(jù)要求來(lái)抓取指定的豬。* BLL好比食品加工廠,將豬肉深加工成各種可以食用的食品(業(yè)務(wù)處理。* Web好比商場(chǎng),將食品包裝成漂亮的可以銷(xiāo)售的產(chǎn)品,展現(xiàn)給顧客(UI表現(xiàn)層。* 豬肉

8、好比Model,無(wú)論是哪個(gè)廠(層,各個(gè)環(huán)節(jié)傳遞的本質(zhì)都是豬肉,豬肉貫穿整個(gè)過(guò)程。* 通用類(lèi)庫(kù)Common相當(dāng)于工人使用的各種工具,為各個(gè)廠(層提供諸如殺豬刀、繩子、剪刀、包裝箱、工具車(chē)等共用的常用工具(類(lèi)。其實(shí),每個(gè)部門(mén)本來(lái)是可以自己制作自己的工具的,但是那樣會(huì)使效率比較低,而且也不專(zhuān)業(yè),并且很多工作都會(huì)是重復(fù)的。因此,就專(zhuān)門(mén)有人開(kāi)了這樣的工廠來(lái)制作這些工具,提供給各個(gè)工廠,有了這樣的分工,工廠就可以專(zhuān)心做自己的事情了。當(dāng)然,這里只是形象的比喻,目的是為了讓大家更好地理解,實(shí)際的情況在細(xì)節(jié)上會(huì)有所不同。這個(gè)例子也只是說(shuō)明了從豬圈到商場(chǎng)的單向過(guò)程,而實(shí)際三層開(kāi)發(fā)中的數(shù)據(jù)交互是雙向的,可取可存。不

9、過(guò),據(jù)說(shuō)有一種機(jī)器,把豬從這頭趕進(jìn)去,另一頭就噗噗嚕嚕地出火腿腸了。如果火腿腸賣(mài)不了了,從那頭再放進(jìn)去,這頭豬又原原本本出來(lái)了,科幻的機(jī)器吧,沒(méi)想到也可以和三層結(jié)構(gòu)聯(lián)系上。以上只是笑談,不過(guò)也使三層架構(gòu)的基本概念更容易理解了。上面談了那么多,有人會(huì)問(wèn),我直接從數(shù)據(jù)庫(kù)取出內(nèi)容直接操作不可以嗎?為什么要這么麻煩地用三層架構(gòu)呢?三層架構(gòu)到底有什么好處呢?不分層,當(dāng)然可以,就好比整個(gè)過(guò)程不分屠宰場(chǎng)、加工場(chǎng)之類(lèi)的,都在同一個(gè)場(chǎng)所(工廠完成所有的活(屠殺、加工、銷(xiāo)售。但為什么要加工廠和商場(chǎng)呢?因?yàn)楫?dāng)規(guī)模比較大的時(shí)候,管理起來(lái)就會(huì)變得非常復(fù)雜,這樣的養(yǎng)殖方式已經(jīng)無(wú)法滿(mǎn)足規(guī)?;男枰恕2⑶?,從社會(huì)的發(fā)展來(lái)看

10、,社會(huì)分工是人類(lèi)進(jìn)步的表現(xiàn)。社會(huì)分工的優(yōu)勢(shì)就是讓適合的人做自己擅長(zhǎng)的事情,使平均社會(huì)勞動(dòng)時(shí)間大大縮短,生產(chǎn)效率顯著提高。能夠提供優(yōu)質(zhì)高效勞動(dòng)產(chǎn)品的人才能在市場(chǎng)競(jìng)爭(zhēng)中獲得高利潤(rùn)和高價(jià)值。人盡其才,物盡其用最深刻的含義就是由社會(huì)分工得出的。軟件開(kāi)發(fā)也一樣,做小項(xiàng)目的時(shí)候,分不分層確實(shí)看不出什么差別,并且顯得更麻煩啰嗦了。但當(dāng)項(xiàng)目變大和變復(fù)雜時(shí),分層就顯示出它的優(yōu)勢(shì)來(lái)了。所以分不分層要根據(jù)項(xiàng)目的實(shí)際情況而定,不能一概而論。NET三層架構(gòu)與三層架構(gòu)下GridView控件增刪改操作詳解(二(由于代碼過(guò)多文章發(fā)表不了,所以很多代碼用截圖表示1 新建一個(gè)數(shù)據(jù)庫(kù)test,新建一個(gè)表Users,表中有

11、如下字段(ID,username,password)。其中ID為表示字段。結(jié)構(gòu)如下圖:2 新建三個(gè)類(lèi)庫(kù) DiaryBLL(業(yè)務(wù)邏輯層),DiaryDAL(數(shù)據(jù)訪(fǎng)問(wèn)層),DiaryModel(業(yè)務(wù)實(shí)體層),將上述三個(gè)類(lèi)庫(kù)放至解決方案DiaryPro中,然后在新建一個(gè)網(wǎng)站DiaryWeb。然后右鍵單擊網(wǎng)站,設(shè)為啟動(dòng)項(xiàng)目,結(jié)構(gòu)圖如下:3 添加類(lèi)庫(kù)的引用關(guān)系DiaryBLL添加DiaryDAL和DiaryModel,如下圖所示:DiaryDAL添加DiaryModel,如下圖所示:表示層Web添加上述三個(gè),如下圖所示: 4 類(lèi)庫(kù)中類(lèi)的編寫(xiě)1DiaryM

12、odel(業(yè)務(wù)實(shí)體層),新建一個(gè)User類(lèi) 代碼如下:該類(lèi)可以獲得User類(lèi)的各個(gè)字段。2DiaryDAL(數(shù)據(jù)訪(fǎng)問(wèn)層)  由于本層要用到數(shù)據(jù)庫(kù)的相關(guān)操作,所以這里用到了微軟封裝的DBHelper.cs類(lèi)。DBHelper類(lèi)訪(fǎng)問(wèn)了Web網(wǎng)站的配置文件,獲得連接字符串,DiaryDAL要添加引用System.configuration。Web網(wǎng)站的Web.config文件相關(guān)代碼如下:(將DBHelper.cs類(lèi)紡織DiaryDAL目錄下,要注意的是DBHelper類(lèi)下的命名空間要改為DiaryDAL) 點(diǎn)擊查看DBHelper類(lèi)新建一個(gè)UserServi

13、ce.cs類(lèi),實(shí)現(xiàn)增刪改查等相關(guān)操作,具體代碼如下所示:3DiaryBLL(業(yè)務(wù)邏輯層) 新建一個(gè)UserManage.cs類(lèi),具體代碼如下: 4 Web網(wǎng)站的設(shè)計(jì)為了實(shí)現(xiàn)三層架構(gòu)下的增刪改操作,我們用到了GridView控件,界面如下如所示:GridView的設(shè)計(jì)過(guò)程如下:拖放一個(gè)GridView控件到頁(yè)面中,然后添加三個(gè)BoundField字段,HeaderText屬性分別為用戶(hù)ID、用戶(hù)名、密碼,綁定字段分別為ID,username,password,一個(gè)CommandField字段,顯示編輯按鈕和刪除按鈕,然后再將上述四個(gè)字段轉(zhuǎn)化為模板列。Web網(wǎng)站的設(shè)計(jì)

14、前臺(tái)代碼如下:<% Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>/TR/xhtml1/DTD/xhtml1-transitional.dtd">/1999/xhtml" >         &

15、#160;          用戶(hù)列表:                     BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"   

16、          CellPadding="3" PageSize="4" Width="778px" OnRowDeleting="GridView1_RowDeleting" OnRowDataBound="GridView1_RowDataBound" OnRowEditing="GridView1_RowEditing"     

17、0;       OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowUpdating="GridView1_RowUpdating">                            

18、;                         用戶(hù) ID">                         

19、0;                                                   &#

20、160;                   用戶(hù)名 ">                               &#

21、160;                                                   

22、                                                    

23、60;                         密碼 ">                         

24、0;                                                   &#

25、160;                                                    

26、;                               操作 " ShowHeader="False">              &#

27、160;                                                   

28、       Text=" 更新 ">                                         &#

29、160;           Text=" 取消 ">                                    

30、0;                                                   &#

31、160;    Text=" 編輯 ">                         確認(rèn)要?jiǎng)h除么 ?'" Text=" 刪除 ">            

32、                                                     &#

33、160;                                                       &

34、#160;           添加用戶(hù)         用戶(hù)名:                 密碼:                  

35、0; 添加 " OnClick="Button1_Click" />      后臺(tái)代碼如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.H

36、tmlControls;using DiaryModel;public partial class _Default : System.Web.UI.Page    protected void Page_Load(object sender, EventArgs e            if (!IsPostBack             &

37、#160;      Bind(;                protected void Bind(            GridView1.DataSource = DiaryBLL.UserManage.GetAllUsers(;      

38、60; GridView1.DataBind(;        protected void Button1_Click(object sender, EventArgs e            Users user = new Users(;        user.UserName = this.tb_username.Text.ToString(.Trim(;

39、        user.Password = this.tb_pwd.Text.ToString(.Trim(;        bool bol=DiaryBLL.UserManage.Add(user;        if (bol             

40、0;      Response.Redirect("Default.aspx"                       protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e     

41、       int UserID = Convert.ToInt32(GridView1.Rowse.RowIndex.FindControl("Label1" as Label.Text;        bool bol = DiaryBLL.UserManage.Delete(UserID;        if (bol    &#

42、160;               Bind(;                else                    Response.W

43、rite(""                protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e            if (e.Row.RowType = DataControlRowType.DataRow   &

44、#160;                LinkButton lb = e.Row.FindControl("LinkButton2" as LinkButton;            if (lb.Text = "刪除"       

45、                     lb.Attributes.Add("onclick", "return confirm('確認(rèn)要?jiǎng)h除么?'"                 

46、0;          /     / 讓當(dāng)前處于修改狀態(tài)    /     /     /     protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e            Gri

47、dView1.EditIndex = e.NewEditIndex;        Bind(;        /     / 讓當(dāng)前行處于綁定狀態(tài)    /     /     /     protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e      

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論