對于三層架構(gòu)的概念性意義,網(wǎng)絡(luò)上有很多專文探討,若想深入了解,可以自尋解答.本文僅作為一種應(yīng)用性探討,講的更多的是實現(xiàn)的細節(jié).
簡單地講,三層架構(gòu)是將代碼按其作用分成三部分,每部分解決自己負責(zé)的流程.
從表入深,分別是:
界面層-UI 處理頁面的數(shù)據(jù)顯示,及用戶體驗
邏輯層-BLL 業(yè)務(wù)功能的實現(xiàn)過程,生成結(jié)果,提交給UI
數(shù)據(jù)層-DAL 訪問數(shù)據(jù)庫,將結(jié)果提供給BLL
可以想象成一個做面包過程,DAL負責(zé)從容器中取來面粉+雞蛋+水,BLL負責(zé)攪和成可用的面漿并烘烤,UI負責(zé)把烤好的面包包裝好放在貨柜上等待被買走.
三層架構(gòu)強調(diào)程序的可復(fù)用性,在這一點上并不獨特.
在傳統(tǒng)的ASP編程中,通常將可復(fù)用的代碼封裝在function,sub中并放在例如mainfunction.asp之類的文件中,通過<!--#include file="mainfunction.html" -->來調(diào)用. 事實上,本文所講的三層架構(gòu)的代碼復(fù)用方式,也是用<!--#include file="**.html" -->實現(xiàn)的,跟傳統(tǒng)方式是一致的.所以如果僅僅是開發(fā)一個小型web程序,例如留言本之類,用上三層架構(gòu)就顯得很啰嗦了.
三層架構(gòu)的功用之處,在于駕馭大型web程序的結(jié)構(gòu),使之便于管理和擴展.
在設(shè)計UI的時候,我們不需要關(guān)心其中的邏輯和數(shù)據(jù)問題,只需要空出對應(yīng)的位置,用于放置數(shù)據(jù). 在設(shè)計和修改的時候,要解決的只是HTML的結(jié)構(gòu),代碼看起來干凈利落,做起來也是干凈利落.
UI直接將程序邏輯的任務(wù)丟給BLL,BLL就開始構(gòu)建具體的實現(xiàn)細節(jié).BLL的創(chuàng)建依賴于業(yè)務(wù). 例如一個文章系統(tǒng),BLL_Aticle就表示它是用于對文章的處理的.BLL_Aticle可以提供給UI一個文章列表的recordset,顯示在UI的預(yù)留位置. 當(dāng)BLL_Aticle需要從數(shù)據(jù)庫中獲取數(shù)據(jù)的時候,就將任務(wù)丟給DAL層
DAL層專門負責(zé)和數(shù)據(jù)庫打交道,它從BLL獲取參數(shù),組織一個有效的SQL,建立數(shù)據(jù)庫連接,執(zhí)行SQL進行更新或獲取,將返回的數(shù)據(jù)交給BLL.
每一部分的業(yè)務(wù)都集中于一個UI-BLL-DAL的鏈中,上下清晰了然. 至于是怎樣的便于管理和擴展,將在后面結(jié)合實例進行分析.
復(fù)雜的生命形式必有復(fù)雜的生存法則,若想在自己的項目中應(yīng)用好三層架構(gòu),需要多用點心體會其中的應(yīng)用法則.
我對三層架構(gòu)的理解還不夠深,這些文章能算是拋磚引玉就不錯了.大家在閱讀當(dāng)中不要局限于我所構(gòu)思的法則,要多向具體的應(yīng)用中去實踐,根據(jù)具體情況,尋出自己的法則. 有所感悟,就記得寫下來,這種感悟是進步的契機,但必然不是最終的結(jié)果.有了感悟就拿去應(yīng)用,可以發(fā)現(xiàn)它的優(yōu)劣,繼續(xù)完善.
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答??! 點擊進入論壇