在軟件體系架構(gòu)設(shè)計中,分層式結(jié)構(gòu)是最多見,也是最重要的1種結(jié)構(gòu)。3層從下至上分別為:數(shù)據(jù)訪問層(DAL)、業(yè)務(wù)邏輯層(BLL)、表示層(UI)。
表現(xiàn)層(UI):展現(xiàn)給用戶的界面,即用戶在使用1個系統(tǒng)的時候他的所見所得。
業(yè)務(wù)邏輯層(BLL):對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務(wù)邏輯處理。
數(shù)據(jù)訪問層(DAL):對http://www.vxbq.cn/db/的操作,數(shù)據(jù)的增加、刪除、修改、查找等。
為何要用3層架構(gòu)?
解耦!
不是所有的程序都需要使用3層架構(gòu),沒必要把簡單的問題復(fù)雜化。
先來講1下解耦,舉例:修電腦
電腦硬盤壞了?我們要做的就是換掉電腦硬盤
內(nèi)存條壞了?只要換內(nèi)存條就好
這些部件出現(xiàn)問題,都不會影響別的部件的正常使用,這個就是讓他們之間解耦。而和電腦不同的收音機(jī),任何部件壞了,都會影響別的部件,這個體現(xiàn)的就是他們之間的耦合比較高。從這個例子里面就能夠看出解耦的好處,在3層中就是用的解耦的思想。
數(shù)據(jù)訪問層:從數(shù)據(jù)源加載(Select),寫入(Insert/Update),刪除(Delete)數(shù)據(jù)。僅限于和數(shù)據(jù)源打交道,讓程序簡單明了。
顯示層(UI):向用戶展現(xiàn)特定業(yè)務(wù)數(shù)據(jù),收集用戶的輸入信息和操作。
原則:用戶至上,統(tǒng)籌簡潔。
業(yè)務(wù)邏輯層(BLL):從DAL中獲得數(shù)據(jù),以供UI顯示用,從UI中獲得用戶指令和數(shù)據(jù),履行業(yè)務(wù)邏輯、從UI中獲得用戶指令和數(shù)據(jù),通過DAL寫入數(shù)據(jù)源。
UI->BLL->UI:UI提供數(shù)據(jù)指令到業(yè)務(wù)邏輯,若自己可以弄定,則直接反饋到UI
UI->BLL->DAL->BLL->DAL:UI提供用戶指令和數(shù)據(jù),提出要求并搜集1定的數(shù)據(jù)BLL,BLL處理不了時,要訪問數(shù)據(jù)源,則轉(zhuǎn)給DAL
以登陸為例子,說明3層之間的援用關(guān)系:
實體層(entity):定義的用戶名和密碼。
U層:向?qū)?yīng)的文本框中輸入賬號和密碼
B層:判斷U層輸入的賬號和密碼是不是存在。
D層:連接http://www.vxbq.cn/db/的語句,查詢http://www.vxbq.cn/db/。
他們之間的聯(lián)系是通過實體傳遞來進(jìn)行的,。
DAL所在程序集不援用BLL和UI
BLL需要援用DAL
UI直接援用DAL,可能援用BLL
非常忌諱相互援用,為了不這個問題所有出現(xiàn)了實體層(業(yè)務(wù)數(shù)據(jù)模型,里面的數(shù)據(jù)和http://www.vxbq.cn/db/的有所差異)
DAL只提供基本的數(shù)據(jù)訪問,不包括任何業(yè)務(wù)相干的邏輯處理。UI只負(fù)責(zé)顯示和收集用戶操作,不包括任何的業(yè)務(wù)相干的邏輯處理,BLL負(fù)責(zé)處理業(yè)務(wù)邏輯,通過獲得UI傳來的操作指令,決定履行業(yè)務(wù)邏輯,在需要訪問數(shù)據(jù)源的時候直接交給DAL處理。處理完成后,返回必要數(shù)據(jù)給UI。
表示層(UI)是用戶需要的界面,用戶有甚么需求都是在這個上面進(jìn)行的改動,1旦有改動,首先U層向B層發(fā)送用戶要求的說明,到達(dá)B層,B層再將U層的用戶要求發(fā)送到D層,D層接遭到用戶要求的指令后,對它進(jìn)行處理,發(fā)送數(shù)據(jù)反饋到B層,B層再發(fā)給U層,將這1變化反應(yīng)出來。
舉例:
小菜和大鳥吃羊肉串的例子,小菜和大鳥就是用戶,服務(wù)員為表示層(U層),烤肉師父為業(yè)務(wù)邏輯層(U層援用B層的方法或參數(shù)),老板娘為數(shù)據(jù)訪問層(D層),負(fù)責(zé)給烤肉師父從庫房拿烤串。大鳥點(diǎn)了羊肉串5串(參數(shù)),服務(wù)員把羊肉串5串(參數(shù)傳遞)傳遞給烤肉師父(數(shù)據(jù)要求),烤肉師父再傳遞給老板娘(對參數(shù)進(jìn)行處理),老板娘得到要求后,拿羊肉串給烤肉師父(數(shù)據(jù)反饋),烤肉師父將烤好的羊肉串給服務(wù)員(數(shù)據(jù)反饋),服務(wù)員再將5串羊肉串給大鳥(U層展現(xiàn)出來),他們之間通過調(diào)用來實現(xiàn)聯(lián)系。
業(yè)務(wù)邏輯簡單,沒有真實的數(shù)據(jù)存儲層
抽象出業(yè)務(wù)邏輯層,當(dāng)業(yè)務(wù)復(fù)雜到1定程度,當(dāng)數(shù)據(jù)存儲到相應(yīng)的存儲介質(zhì),數(shù)據(jù)存儲脫離開業(yè)務(wù)邏輯,把業(yè)務(wù)邏輯脫離開UI單獨(dú)存在,UI只需要呼喚業(yè)務(wù)訪問層,就能夠?qū)崿F(xiàn)跟用戶的交互。
1、開發(fā)人員可以只關(guān)注全部結(jié)構(gòu)中的其中某1層;
2、可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn);
3、可以下降層與層之間的依賴;
4、有益于標(biāo)準(zhǔn)化;
5、利于各層邏輯的復(fù)用。
6、結(jié)構(gòu)更加的明確
7、在后期保護(hù)的時候,極大地下降了保護(hù)本錢和保護(hù)時間。
這幾點(diǎn)的中心思想就是“高內(nèi)聚,低耦合”,類之間的耦合越弱,越有益于復(fù)用,1個處在弱耦合的類被修改,不會對有關(guān)系的類造成波及。
以上是對3層的簡單認(rèn)識,有的地方可能寫的不對,歡迎指出!