初识三层结构
第一次聽(tīng)說(shuō)三層結(jié)構(gòu),是九期的一個(gè)師哥在給我們講高校云平臺(tái)。那天的感覺(jué)像是在聽(tīng)天書(shū),以前從沒(méi)有接觸過(guò)。不過(guò),那幾個(gè)不斷在師哥口中重復(fù)的名詞BLL層、DAL層還是留下了些印象。現(xiàn)在自己來(lái)到三層結(jié)構(gòu)的學(xué)習(xí)了,對(duì)師哥講的那些詞算是有種久違的感覺(jué)。下面就對(duì)三層結(jié)構(gòu)的初識(shí)做個(gè)總結(jié)。
一. 多層結(jié)構(gòu)的劃分方式。
結(jié)構(gòu)的劃分方式有兩種,分別是物理上和邏輯上。從物理的角度來(lái)說(shuō),可分為顯示層、業(yè)務(wù)層和數(shù)據(jù)層。從邏輯的角度看,可分為UI層、BLL+DAL層以及DB層。這里我們所說(shuō)的三層結(jié)構(gòu)是指邏輯上劃分的三層。
剛開(kāi)始還真沒(méi)發(fā)現(xiàn)物理上與邏輯上有什么差別,想想這不都是同樣的三層嗎。這個(gè)問(wèn)題不解決,后面的學(xué)習(xí)就更是問(wèn)題。后來(lái)發(fā)現(xiàn),它們兩個(gè)根本不是一回事,物理上的三層是指客戶機(jī)、應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器,可以稱得上是三臺(tái)機(jī)器。而邏輯上的三層是指一臺(tái)機(jī)器上包含了表示層、應(yīng)用層、數(shù)據(jù)層和數(shù)據(jù)庫(kù),也可以成為模塊,這樣可能容易理解些。
值得注意的是,從邏輯結(jié)構(gòu)到物理結(jié)構(gòu)的對(duì)應(yīng)關(guān)系并不是唯一的,了解到應(yīng)該是包含五種。不過(guò)現(xiàn)在覺(jué)得自己的學(xué)習(xí)還沒(méi)有達(dá)到那樣深層的階段,這里就不詳細(xì)研究了,還是先知道就好。大家可以參考下面的圖有個(gè)簡(jiǎn)單了解。
二.為什么要使用三層架構(gòu)。
為什么要用三層,這個(gè)問(wèn)題的答案很簡(jiǎn)單,可以想想之前學(xué)習(xí)的軟工思想。在整個(gè)編程中,最基本的就是“高內(nèi)聚低耦合”的思想。所以,有了三層,將模塊間分層,這樣程序出錯(cuò)可以分層去檢查,各層次間也不會(huì)發(fā)生相互影響,就大大提高了效率。
既然談到這里,就簡(jiǎn)單的說(shuō)說(shuō)三層架構(gòu)的優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):
1. 開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層。
2. 可以很容易用新的實(shí)現(xiàn)來(lái)替換原有層次的實(shí)現(xiàn)。
3. 可以降低層與層之間的依賴。
4. 有利于標(biāo)準(zhǔn)化。
5. 利于各層邏輯的復(fù)用。
缺點(diǎn):
1. 降低系統(tǒng)的性能。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接訪問(wèn)數(shù)據(jù)庫(kù),以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過(guò)中間層來(lái)完成。
2. 有時(shí)導(dǎo)致級(jí)聯(lián)的修改。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層中都增加相應(yīng)的代碼。
在此也有一點(diǎn)需要聲明:三層結(jié)構(gòu)也不是萬(wàn)能的,它有優(yōu)點(diǎn)也有缺點(diǎn),在軟件開(kāi)發(fā)中,也要視情況而定究竟需不需要使用它。緊隨其后的就是下一個(gè)問(wèn)題。
三.什么情況下需要使用三層架構(gòu)。
一句話的總結(jié):當(dāng)業(yè)務(wù)復(fù)雜到一定程度,當(dāng)數(shù)據(jù)存儲(chǔ)到相應(yīng)的數(shù)據(jù)庫(kù)或數(shù)據(jù)存儲(chǔ)介質(zhì)。前面這些都是對(duì)三層宏觀上的介紹,下面就是對(duì)三層中各層的深入剖析。
一. 數(shù)據(jù)訪問(wèn)層(DAL)
1. 作用
1) 從數(shù)據(jù)源加載數(shù)據(jù)(Select)
2) 向數(shù)據(jù)源寫入數(shù)據(jù)(Insert/Update)
3) 從數(shù)據(jù)源刪除數(shù)據(jù)(Delete)
2. 常用的技術(shù)
1) ADO.NET+SQL語(yǔ)句
2) O/R Mapping 框架
3) 訪問(wèn)SQL Server數(shù)據(jù)庫(kù)時(shí)Linq to SQL
3. 具體應(yīng)用原則
只提供基本的數(shù)據(jù)訪問(wèn),不包含任何業(yè)務(wù)相關(guān)的邏輯處理。
4. 認(rèn)識(shí)與體會(huì)
在機(jī)房收費(fèi)系統(tǒng)中,我們都建立了與數(shù)據(jù)庫(kù)之間的連接。在這里,我們一遍遍寫SQL語(yǔ)句,反復(fù)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增刪改查,所以利用SQL語(yǔ)句對(duì)數(shù)據(jù)的處理肯定是不陌生。不過(guò),現(xiàn)在分層之后,光從上面的那些技術(shù)來(lái)看,瞬間就感覺(jué)高大的,還有很多我們要學(xué)習(xí)的地方。
二. 顯示層(UI)
1. 作用
1) 向用戶展現(xiàn)特定業(yè)務(wù)數(shù)據(jù)
2) 采集用戶的輸入信息和操作
2. 設(shè)計(jì)原則
用戶至上,兼顧簡(jiǎn)潔
3. 常用技術(shù)
1) Windows Form:Form、Control
2) ASP.NET :aspx, ascx, master, HTML
4. 具體應(yīng)用原則
只負(fù)責(zé)顯示和采集用戶操作,不包含任何的業(yè)務(wù)相關(guān)的邏輯處理。
5. 認(rèn)識(shí)與體會(huì)
這一層看似簡(jiǎn)單,但要做得好確實(shí)非常困難的。就還是拿之前做的收費(fèi)系統(tǒng)來(lái)說(shuō),我自己覺(jué)得我做的界面已經(jīng)很好了,整齊干凈,控件的大小也很統(tǒng)一,但驗(yàn)收的時(shí)候,師父就覺(jué)得怎么看怎么別扭,還覺(jué)得很亂,這樣,就給用戶不好的心情了。雖說(shuō)是蘿卜青菜,各有所愛(ài),但軟件開(kāi)發(fā)還是要去做符合喜聞樂(lè)見(jiàn)的大眾文化的界面好,用戶這一關(guān)就不難了。在三層的學(xué)習(xí)中,顯示層也有這么多的技術(shù)可以參考,可想,要做出一道佳肴,還需要我們學(xué)好技術(shù)才行啊。
三. 業(yè)務(wù)邏輯層(BLL)
1. 作用
1) 體現(xiàn)核心價(jià)值的部分,關(guān)注點(diǎn)集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn)等與業(yè)務(wù)系統(tǒng)有關(guān)的系統(tǒng)設(shè)計(jì)。
2) 處于訪問(wèn)層與表示層中間,起到了數(shù)據(jù)交換中承上啟下的作用。
2. 具體應(yīng)用原則
負(fù)責(zé)處理業(yè)務(wù)邏輯。通過(guò)獲取UI傳來(lái)的操作指令,決定執(zhí)行業(yè)務(wù)邏輯,在需要訪問(wèn)數(shù)據(jù)源的時(shí)候直接交給DAL處理。處理完成后,返回必要數(shù)據(jù)給UI。
3. 認(rèn)識(shí)與體會(huì)
邏輯層,看著名字就覺(jué)得它不簡(jiǎn)單,功能的實(shí)現(xiàn)很大程度上是依賴它其中的代碼的。加上它又是兩層的中間,所以關(guān)系的依賴與否對(duì)其來(lái)說(shuō)是關(guān)鍵。
在此對(duì)各個(gè)層也有了更加深刻的了解,似乎覺(jué)得三層已然在心中。可是這些遠(yuǎn)遠(yuǎn)是不夠的,所以,后面自己還將結(jié)合實(shí)例去進(jìn)一步了解,就從視頻中的登錄小例子開(kāi)始。Ready?Go!
總結(jié)
- 上一篇: 大学计算机二级必考,计算机二级大学生必考
- 下一篇: Dubbo操作