學(xué)習(xí)筆記。
摘自《一都編程》
https://baijiahao.baidu.com/s?id=1657324346823084061&wfr=spider&for=pc
一、概述
1)三層架構(gòu)
??經(jīng)典三層架構(gòu)是一種組織大型項(xiàng)目的分層開(kāi)發(fā)思想和規(guī)范。
??經(jīng)典三層架構(gòu)是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:
- 界面表示層、
- 業(yè)務(wù)邏輯層、
- 數(shù)據(jù)訪問(wèn)層。
2)特點(diǎn)
??三層架構(gòu)的特點(diǎn):
- 1、開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層;
- 2、可以很容易的用新的實(shí)現(xiàn)來(lái)替換原有的實(shí)現(xiàn);
- 3、可以降低層與層之間的依賴(lài);降低代碼耦合度。
- 4、利于各層邏輯的復(fù)用,代碼重用。
- 5、結(jié)構(gòu)更加的明確。
- 6、在后期維護(hù)的時(shí)候,極大地降低了維護(hù)成本和維護(hù)時(shí)間,便于維護(hù)。
3)含義
??經(jīng)典三層架構(gòu)的分層做到了“高內(nèi)聚低耦合”的思想,具體含義如下:
- 界面表示層(UI):主要實(shí)現(xiàn)和用戶的交互界面,以及事件處理程序的編寫(xiě)。
- 業(yè)務(wù)邏輯層(BLL):主要實(shí)現(xiàn)數(shù)據(jù)處理和數(shù)據(jù)傳遞,將界面表示層和數(shù)據(jù)訪問(wèn)層連接起來(lái),起到承上啟下的作用。
- 數(shù)據(jù)訪問(wèn)層(DAL):主要實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的增刪改查操作。
4) WebForm框架
??在ASP.NET WebForm框架中,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層都是由類(lèi)(class)組成的,而UI層是使用ASPX頁(yè)面和ASPX.CS組成的。
??這里我們使用ASP.NET WebForms應(yīng)用程序+C#+SQL Server搭建.NET經(jīng)典三層架構(gòu)。
二、三層架構(gòu)結(jié)構(gòu)圖



??當(dāng)我們開(kāi)發(fā)一個(gè)完整的.NET系統(tǒng),主要功能和邏輯代碼都是寫(xiě)在業(yè)務(wù)邏輯層的,負(fù)責(zé)大量的業(yè)務(wù)邏輯代碼,例如:計(jì)算總價(jià)格、登錄邏輯、驗(yàn)證邏輯、審批流程等。
??而業(yè)務(wù)邏輯層處理的數(shù)據(jù)都是來(lái)自數(shù)據(jù)庫(kù)和用戶界面,將用戶界面收集過(guò)來(lái)的數(shù)據(jù),經(jīng)過(guò)業(yè)務(wù)邏輯層的處理傳到數(shù)據(jù)庫(kù)中,而從數(shù)據(jù)庫(kù)獲取的數(shù)據(jù),經(jīng)過(guò)業(yè)務(wù)邏輯層處理后再呈現(xiàn)給用戶界面。所以業(yè)務(wù)邏輯層是中間層,起到承上啟下的作用。
??經(jīng)典三層架構(gòu)之間的調(diào)用關(guān)系是:表示層調(diào)用業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)訪問(wèn)層。而表示層與數(shù)據(jù)訪問(wèn)層是不可相互調(diào)用,它們之間是隔離的。
??設(shè)計(jì)模式遵循的設(shè)計(jì)原理為"高內(nèi)聚,低耦合".設(shè)計(jì)模式的核心思想是代碼的可重用性,MVC是設(shè)計(jì)模式。所以三層架構(gòu)和設(shè)計(jì)模式是不同的設(shè)計(jì)思想。
??表示層就象你去飯店吃飯,你點(diǎn)了一個(gè)清真鱸魚(yú)。業(yè)務(wù)層負(fù)責(zé)洗、切、蒸等。數(shù)據(jù)層負(fù)責(zé)提供魚(yú)、油、鹽等。
三、界面表示層
??界面表示層在項(xiàng)目中簡(jiǎn)寫(xiě)為UI表示,UI層調(diào)用業(yè)務(wù)邏輯層BLL的相關(guān)類(lèi)的方法來(lái)完成操作。UI在三層架構(gòu)中不只是頁(yè)面的呈現(xiàn),如注冊(cè)頁(yè)面:
??這個(gè)頁(yè)面在ASP.NET WebForm中可以使用aspx頁(yè)面表示,但是對(duì)于aspx.cs后臺(tái)代碼,也是屬于UI層的,這個(gè)不要理解錯(cuò)誤了,只有存在aspx.cs代碼,才可以與業(yè)務(wù)邏輯層打交道。調(diào)用業(yè)務(wù)邏輯層的代碼,從而通過(guò)業(yè)務(wù)邏輯層與數(shù)據(jù)訪問(wèn)層作數(shù)據(jù)交互。
??UI層提供用戶操作,完成顯示邏輯,直接面向用戶,是用戶可以看得見(jiàn)的界面,而業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層對(duì)用戶而言都是隱藏的。
??對(duì)于UI層,在ASP.NET WebForm框架中,就是創(chuàng)建一個(gè)ASP.NET Web應(yīng)用程序。

點(diǎn)擊“確定”按鈕后,創(chuàng)建一個(gè)空的ASP.NET Web應(yīng)用程序。

在上圖中已經(jīng)創(chuàng)建了一個(gè)UI項(xiàng)目,此項(xiàng)目是一個(gè)空的ASP.NET Web應(yīng)用程序。
四、業(yè)務(wù)邏輯層
??經(jīng)典三層架構(gòu)中的業(yè)務(wù)邏輯層,實(shí)現(xiàn)重要的業(yè)務(wù)邏輯操作,簡(jiǎn)寫(xiě)為BLL,在項(xiàng)目中也是使用BLL表示。
??UI層調(diào)用BLL層,而B(niǎo)LL調(diào)用DAL層,UI層禁止調(diào)用DAL層。
??BLL主要是針對(duì)具體的問(wèn)題的操作,也可以理解成對(duì)數(shù)據(jù)層的調(diào)用,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理,如果說(shuō)數(shù)據(jù)層是積木,那邏輯層就是對(duì)這些積木的搭建。
??BLL是業(yè)務(wù)邏輯層,是由C#類(lèi)庫(kù)項(xiàng)目組成的。

在圖中選擇“類(lèi)庫(kù)”,如圖:

其中的Class1.cs是默認(rèn)添加的類(lèi),可以刪除。
五、數(shù)據(jù)訪問(wèn)層
??三層架構(gòu)中的數(shù)據(jù)訪問(wèn)層主要用來(lái)操作數(shù)據(jù)庫(kù),如:向數(shù)據(jù)庫(kù)表添加數(shù)據(jù)、修改數(shù)據(jù)。刪除數(shù)據(jù)和查詢(xún)數(shù)據(jù)等。
??數(shù)據(jù)訪問(wèn)層簡(jiǎn)寫(xiě)為DAL,在項(xiàng)目中也可以使用DAL表示。像DBHelper類(lèi)就需要放在DAL層中。
??數(shù)據(jù)訪問(wèn)層DAL只能被業(yè)務(wù)邏輯層BLL調(diào)用,不能被UI層調(diào)用。
??DAL有時(shí)候也稱(chēng)為是持久層,其功能主要是負(fù)責(zé)數(shù)據(jù)庫(kù)的訪問(wèn),可以訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng)、二進(jìn)制文件、文本文檔或是XML文檔。
??三層中的DAL層也是C#類(lèi)庫(kù)項(xiàng)目,跟BLL層一樣,都是由類(lèi)組成的。
在圖中創(chuàng)建一個(gè)名稱(chēng)為DAL的項(xiàng)目名稱(chēng)。如圖:

??在此圖中,三層架構(gòu)中的三個(gè)項(xiàng)目全部創(chuàng)建完成了。
六、實(shí)體層
1)實(shí)體
??實(shí)體(Entity)使用Model表示,它不屬于三層中的任何一層。也就是說(shuō)實(shí)體層可以被三層中的任何一層調(diào)用。只提供二維表關(guān)系數(shù)據(jù)和對(duì)象數(shù)據(jù)的映射。
??Model層只能由一些類(lèi)組成,類(lèi)中封裝數(shù)據(jù)庫(kù)表中的字段,也就是類(lèi)封裝屬性。屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)中的字段。

2)實(shí)體類(lèi)的作用
??實(shí)體類(lèi)的作用如下:
- 實(shí)現(xiàn)面向?qū)ο笏枷胫械?封裝"。
- 貫穿于三層,在三層之間傳遞數(shù)據(jù)。
- 每一層(UI—>BLL—>DAL)之間的數(shù)據(jù)傳遞(單向)是靠變量或?qū)嶓w作為參數(shù)來(lái)傳遞的,這樣就構(gòu)造了三層之間的聯(lián)系,完成了功能的實(shí)現(xiàn)。
3)操作對(duì)象
??我們做系統(tǒng)的目的,是為用戶提供服務(wù),用戶可不關(guān)心你的系統(tǒng)后臺(tái)是怎么工作的,用戶只關(guān)心軟件是不是好用,界面是不是符合自己心意。用戶在界面上輕松的增、刪、改、查,那么數(shù)據(jù)庫(kù)中也要有相應(yīng)的增、刪、改、查,而增刪改查具體操作對(duì)象就是數(shù)據(jù)庫(kù)中的數(shù)據(jù),說(shuō)白了就是表中的字段。所以,將每個(gè)數(shù)據(jù)表作為一個(gè)實(shí)體類(lèi),實(shí)體類(lèi)封裝的屬性對(duì)應(yīng)到表中的字段,這樣的話,實(shí)體在貫穿于三層之間時(shí),就可以實(shí)現(xiàn)增刪改查數(shù)據(jù)了
4)Models
??實(shí)體層也是由許多的C#類(lèi)組成的,也是類(lèi)庫(kù)項(xiàng)目,使用Models表示,一般是每個(gè)類(lèi)對(duì)應(yīng)一個(gè)實(shí)體,也就是一個(gè)類(lèi)對(duì)應(yīng)一個(gè)SQL Server數(shù)據(jù)庫(kù)中的表。類(lèi)中封裝的屬性與表中的列(字段)映射。

??注意:實(shí)體層Model不屬于三層中的任何一層,Model層可以被UI、BLL、DAL調(diào)用,Model主要用于三層之間數(shù)據(jù)的傳遞。
七、應(yīng)用程序
??以上就搭建好了一個(gè)經(jīng)典的.NET三層架構(gòu),對(duì)于簡(jiǎn)單的CMS內(nèi)容管理系統(tǒng),足夠使用。如果是較復(fù)雜的.NET系統(tǒng),則只需要在經(jīng)典三層架構(gòu)上擴(kuò)充即可。
??有了經(jīng)典的.NET三層架構(gòu),我們就可以在此架構(gòu)下填充業(yè)務(wù)邏輯,開(kāi)發(fā)出具有個(gè)性業(yè)務(wù)邏輯的.NET應(yīng)用程序。