最常見的架構(gòu)就是三層架構(gòu)啦!
1. UI層(用戶界面)
就是給用戶看的,負(fù)責(zé)展示內(nèi)容和提供操作入口,比如按鈕啥的。用戶點(diǎn)一下,它就反饋結(jié)果。
2. 業(yè)務(wù)層(Business Tier)
這個(gè)是干重活的,主要負(fù)責(zé)數(shù)據(jù)處理,把加工后的數(shù)據(jù)給UI層或者數(shù)據(jù)層用。它又分為BLL(業(yè)務(wù)邏輯層)和DAL(數(shù)據(jù)訪問層)。簡單說,DAL專門負(fù)責(zé)跟數(shù)據(jù)庫打交道,讀寫數(shù)據(jù);BLL則負(fù)責(zé)調(diào)用DAL,對數(shù)據(jù)做運(yùn)算和操作,同時(shí)響應(yīng)UI層的需求。
3. 數(shù)據(jù)層(Data Tier)
顧名思義,就是存數(shù)據(jù)的地方,可能是數(shù)據(jù)庫、XML文件或者其他形式。它只管數(shù)據(jù)怎么存,不管別的事。
這樣就把顯示業(yè)務(wù)數(shù)據(jù)分開了:
- UI層只負(fù)責(zé)展示,數(shù)據(jù)怎么算不用它管;
- 數(shù)據(jù)怎么處理交給BLL;
- 數(shù)據(jù)怎么存取交給DAL;
- 最終存儲(chǔ)方式由數(shù)據(jù)層搞定。
各層之間比較獨(dú)立,改動(dòng)一個(gè)層時(shí),其他層受影響的概率小很多,有時(shí)候只需要重新編譯修改的部分就行。
開發(fā)人員一般只要搞定UI、BLL和DAL就行了,數(shù)據(jù)層通常靠操作系統(tǒng)或數(shù)據(jù)庫管理系統(tǒng)來完成,咱們按規(guī)矩存取數(shù)據(jù)就好。
不過,光把項(xiàng)目分成DAL、BLL、WebUI三個(gè)模塊,并不意味著這就是標(biāo)準(zhǔn)的三層架構(gòu)!以下問題可以幫你判斷:
1. UI層里有沒有SQL語句或者存儲(chǔ)過程?如果有,是不是只讀操作,不會(huì)改數(shù)據(jù)?
2. 如果去掉UI層,你的項(xiàng)目還能通過API提供完整功能嗎?
3. DAL能不能直接搬到別的類似項(xiàng)目里用?
4. 這三個(gè)模塊能不能分別跑在不同的服務(wù)器上?
如果這些問題的答案不是全YES,那你的項(xiàng)目還不算真正意義上的三層架構(gòu)。三層架構(gòu)有一些必須遵守的原則:
1. UI層只能是個(gè)殼,不能摻雜任何業(yè)務(wù)邏輯。
2. 開發(fā)時(shí)要從業(yè)務(wù)邏輯出發(fā),而不是從界面開始。BLL層得用面向?qū)ο蟮姆绞綄?shí)現(xiàn)所有業(yè)務(wù)邏輯。
3. 數(shù)據(jù)層的設(shè)計(jì)要在一定抽象程度上做到系統(tǒng)無關(guān),不管是SqlHelper還是ORM映射類,都得盡量通用。
就這樣吧!
1. UI層(用戶界面)
就是給用戶看的,負(fù)責(zé)展示內(nèi)容和提供操作入口,比如按鈕啥的。用戶點(diǎn)一下,它就反饋結(jié)果。
2. 業(yè)務(wù)層(Business Tier)
這個(gè)是干重活的,主要負(fù)責(zé)數(shù)據(jù)處理,把加工后的數(shù)據(jù)給UI層或者數(shù)據(jù)層用。它又分為BLL(業(yè)務(wù)邏輯層)和DAL(數(shù)據(jù)訪問層)。簡單說,DAL專門負(fù)責(zé)跟數(shù)據(jù)庫打交道,讀寫數(shù)據(jù);BLL則負(fù)責(zé)調(diào)用DAL,對數(shù)據(jù)做運(yùn)算和操作,同時(shí)響應(yīng)UI層的需求。
3. 數(shù)據(jù)層(Data Tier)
顧名思義,就是存數(shù)據(jù)的地方,可能是數(shù)據(jù)庫、XML文件或者其他形式。它只管數(shù)據(jù)怎么存,不管別的事。
這樣就把顯示業(yè)務(wù)數(shù)據(jù)分開了:
- UI層只負(fù)責(zé)展示,數(shù)據(jù)怎么算不用它管;
- 數(shù)據(jù)怎么處理交給BLL;
- 數(shù)據(jù)怎么存取交給DAL;
- 最終存儲(chǔ)方式由數(shù)據(jù)層搞定。
各層之間比較獨(dú)立,改動(dòng)一個(gè)層時(shí),其他層受影響的概率小很多,有時(shí)候只需要重新編譯修改的部分就行。
開發(fā)人員一般只要搞定UI、BLL和DAL就行了,數(shù)據(jù)層通常靠操作系統(tǒng)或數(shù)據(jù)庫管理系統(tǒng)來完成,咱們按規(guī)矩存取數(shù)據(jù)就好。
不過,光把項(xiàng)目分成DAL、BLL、WebUI三個(gè)模塊,并不意味著這就是標(biāo)準(zhǔn)的三層架構(gòu)!以下問題可以幫你判斷:
1. UI層里有沒有SQL語句或者存儲(chǔ)過程?如果有,是不是只讀操作,不會(huì)改數(shù)據(jù)?
2. 如果去掉UI層,你的項(xiàng)目還能通過API提供完整功能嗎?
3. DAL能不能直接搬到別的類似項(xiàng)目里用?
4. 這三個(gè)模塊能不能分別跑在不同的服務(wù)器上?
如果這些問題的答案不是全YES,那你的項(xiàng)目還不算真正意義上的三層架構(gòu)。三層架構(gòu)有一些必須遵守的原則:
1. UI層只能是個(gè)殼,不能摻雜任何業(yè)務(wù)邏輯。
2. 開發(fā)時(shí)要從業(yè)務(wù)邏輯出發(fā),而不是從界面開始。BLL層得用面向?qū)ο蟮姆绞綄?shí)現(xiàn)所有業(yè)務(wù)邏輯。
3. 數(shù)據(jù)層的設(shè)計(jì)要在一定抽象程度上做到系統(tǒng)無關(guān),不管是SqlHelper還是ORM映射類,都得盡量通用。
就這樣吧!