DAL,IDAL,BLL,Factory作用
| 業(yè)務(wù)邏輯層(BLL):主要是針對具體的問題的操作,也可以理解成對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務(wù)邏輯處理。如果說數(shù)據(jù)層是積木,那邏輯層就是對這些積木的搭建。 ?數(shù)據(jù)訪問層(DAL):主要是對原始數(shù)據(jù)(數(shù)據(jù)庫或者文本文件等存放數(shù)據(jù)的形式)的操作層,而不是指原始數(shù)據(jù),也就是說,是對數(shù)據(jù)的操作,而不是數(shù)據(jù)庫,具體為業(yè)務(wù)邏輯層或表示層提供數(shù)據(jù)服務(wù)。 ? (IDAL)它體現(xiàn)了“抽象”的精神,或者說是“面向接口編程”的最佳體現(xiàn)。抽象的接口模塊IDAL (Model)實體和數(shù)據(jù)庫表映射類(Web)web網(wǎng)站項目。 并不是每個系統(tǒng)都要分層,一般只針對一些大型系統(tǒng)才采用分層,你看PetShop4,總共有22個項目。大體思想是3層,從Model,DAL,BLL,然后他在各層上又采用了工廠模式,把邏輯與實現(xiàn)想分離,比如以前BLL直接調(diào)用DAL就好了,但現(xiàn)在BLL卻調(diào)用了IDAL,IDAL只是一個接口層,里面封狀了要完成的一些業(yè)務(wù)邏輯,而具體的實現(xiàn)則交給DAL去實現(xiàn),然后借助于工廠模式DALFactory和映射完成IDAL層中類的實例化。這樣不管我們用的底層用的是什么數(shù)據(jù)庫都可以完成BLL對DAL的調(diào)用。首先你不應(yīng)該將那些SQL語句放在BLL層中,而應(yīng)該是由DAL層來完成和數(shù)據(jù)庫的交互。要想研究分層模式,PetShop4的確是一個相當(dāng)好的例子,值得學(xué)習(xí)。 |
===========================================
=========================================================================================
=========================================
=======================================
Bll層作用
bll層,又叫業(yè)務(wù)邏輯層,顧名思義,就是放置業(yè)務(wù)邏輯的地方
舉個簡單的例子,飯店的優(yōu)惠方案,滿100元就打9折,不滿100不打折
web頁面提供文本框等讓員工輸入金額,然后調(diào)用bll層的方法;
那bll層就是檢查金額是否滿100,再把實際金額調(diào)用dal層存入數(shù)據(jù)庫;
dal就是把金額插入數(shù)據(jù)庫,不檢查
這樣,如果哪天優(yōu)惠方案變了,只要修改bll,重新編譯bll,而別的地方不用動
之所以現(xiàn)在很多bll就一個簡單的引用dal,1是因為作示例,沒啥業(yè)務(wù)
2是寫的不規(guī)范?
另外要說的是:三層架構(gòu)主要是用于團(tuán)隊開發(fā),便于分工,比如張三做業(yè)務(wù)邏輯,他就不用去關(guān)心數(shù)據(jù)庫類型結(jié)構(gòu)等信息;李四做dal,他就不用關(guān)心業(yè)務(wù)邏輯;只要定義好bll和dal的接口就可以了
如果只是個人開發(fā),或者比較簡單的業(yè)務(wù),用三層是浪費時間
現(xiàn)在網(wǎng)上很多代碼都是為了分層而分層,是否要分層,要根據(jù)項目的具體情況而定,不能一一概而論。
---------------------------------------------------------------------------------------------------------------------------
比如一個網(wǎng)站做了一個 注冊或是 登陸!
在 DAL 層呢 不去做 任何的 判斷(登陸的用戶名存在幾個 ? 注冊的信息 會不會對數(shù)據(jù)庫 有安全方面的影響啊!!等等...? 我們就可以吧這些 判斷的 屬于 業(yè)務(wù)邏輯性的東西 放在 BLL) 這樣DAL 只管 和數(shù)據(jù)庫的交互! 運行速度 會快點吧?
啊?是不是?沒錯吧?哈?
雖然 你看的項目 BLL 層沒寫什么東西!但是那一樣是一個好的習(xí)慣!? 而且易于擴(kuò)展!
----------------------------------------------------------------------------------------------------------------------------
其實我們剛看三層的時候,BLL都是用來傳遞數(shù)據(jù)的,從表現(xiàn)層傳過來參數(shù),然后什么都沒做,直接扔DAL去查詢數(shù)據(jù)庫,所以,我們都覺得BLL層不好用,我一開始也是這么覺得
但是吧,既然要求是這樣,那就肯定有他的作用,其實,在小項目中,BLL確實沒有用,不過,你要做個比較大的項目,不是單純的查數(shù)據(jù)庫,然后直接把數(shù)據(jù)庫查出來的表直接顯示在表現(xiàn)層上,而是你需要把查詢出來的數(shù)據(jù)經(jīng)過一下處理,比如百度貼吧的時間顯示,當(dāng)是當(dāng)天的話,顯示幾點幾分,當(dāng)時好幾天以前的,顯示日期,而在數(shù)據(jù)庫里,存的都是完整的日期,這樣,這個時間的處理代碼,你就可以方在BLL中處理,處理完了再返回給表現(xiàn)層
?
?
?
?
C/S結(jié)構(gòu)開發(fā)框架中BLL層的作用
所謂的三層開發(fā)就是將系統(tǒng)的整個業(yè)務(wù)應(yīng)用劃分為表示層,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層,這樣有利于系統(tǒng)的開發(fā)、維護(hù)、部署和擴(kuò)展。
分層是為了實現(xiàn)“高內(nèi)聚,低耦合”。采用“分而治之”的思想,把問題劃分開來各個解決,易于控制,延展和分配資源。
如下圖所示
業(yè)務(wù)邏輯層用于做一些有效性驗證的工作,以更好的保證程序運行的健壯性。如完成數(shù)據(jù)添加、修改和查詢業(yè)務(wù)等;不允許指定的文本框中輸入空字符串,數(shù)據(jù)格式是否正確以及數(shù)據(jù)類型驗證;用戶權(quán)限的合法性判斷等;通過以上的諸多判斷以決定是否將操作繼續(xù)向后傳遞,盡量保證程序的正常運行。
業(yè)務(wù)邏輯層(Business Logic Layer)無疑是系統(tǒng)架構(gòu)中體現(xiàn)核心價值的部分。它的關(guān)注點主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計,也即是說它是與系統(tǒng)所應(yīng)對的領(lǐng)域(Domain)邏輯有關(guān),很多時候,也將業(yè)務(wù)邏輯層稱為領(lǐng)域?qū)印@鏜artin Fowler在《Patterns of Enterprise Application Architecture》一書中,將整個架構(gòu)分為三個主要的層:表示層、領(lǐng)域?qū)雍蛿?shù)據(jù)源層。作為領(lǐng)域驅(qū)動設(shè)計的先驅(qū)Eric Evans,對業(yè)務(wù)邏輯層作了更細(xì)致地劃分,細(xì)分為應(yīng)用層與領(lǐng)域?qū)?#xff0c;通過分層進(jìn)一步將領(lǐng)域邏輯與領(lǐng)域邏輯的解決方案分離。
業(yè)務(wù)邏輯層在體系架構(gòu)中的位置很關(guān)鍵,它處于數(shù)據(jù)訪問層與表示層中間,起到了數(shù)據(jù)交換中承上啟下的作用。由于層是一種弱耦合結(jié)構(gòu),層與層之間的依賴是向下的,底層對于上層而言是“無知”的,改變上層的設(shè)計對于其調(diào)用的底層而言沒有任何影響。如果在分層設(shè)計時,遵循了面向接口設(shè)計的思想,那么這種向下的依賴也應(yīng)該是一種弱依賴關(guān)系。因而在不改變接口定義的前提下,理想的分層式架構(gòu),應(yīng)該是一個支持可抽取、可替換的“抽屜”式架構(gòu)。正因為如此,業(yè)務(wù)邏輯層的設(shè)計對于一個支持可擴(kuò)展的架構(gòu)尤為關(guān)鍵,因為它扮演了兩個不同的角色。對于數(shù)據(jù)訪問層而言,它是調(diào)用者;對于表示層而言,它卻是被調(diào)用者。依賴與被依賴的關(guān)系都糾結(jié)在業(yè)務(wù)邏輯層上,如何實現(xiàn)依賴關(guān)系的解耦,則是除了實現(xiàn)業(yè)務(wù)邏輯之外留給設(shè)計師的任務(wù)。
因沒有很好的規(guī)范邏輯層所以很多人把BLL說成是DAL(Data Access Layer,數(shù)據(jù)訪問層)和UI(User Interface)層的連接橋梁或中轉(zhuǎn)站.
既然稱作業(yè)務(wù)層必然有他的用處,不僅僅是一個中轉(zhuǎn)的功能.比如要創(chuàng)建一個用戶,可以用以下的邏輯表示:
///?<summary>
///?用戶管理的業(yè)務(wù)邏輯層
///?</summary>
public?class?User_BLL
{
???///?<summary>
???///?增加用戶
???///?</summary>
???///?<param name="instance">用戶實例</param>
???///?<returns></returns>
???bool?AddUser(User instance)
???{
??????if?(this.Validate(instance) ==?false)?return?false;
??????return?_DAL.AddUser(instance);
???}
???
???///?<summary>
???///?用戶資料合法性檢查
???///?</summary>
???///?<param name="instance">用戶實例</param>
???///?<returns></returns>
???private?bool?Validate(User instance)
???{
??????if?(instance.UserID == "")?throw?new?Exception("用戶編號不能為空!");
??????if?(instance.UserUser == "")?throw?new?Exception("用戶名稱不能為空!");
??????if?(_DAL.Exists(instance.UserID))?throw?new?Exception("用戶名已經(jīng)存在");
??????return?true;
???}
}
// 來源:www.CSFramework.com, C/S結(jié)構(gòu)框架學(xué)習(xí)網(wǎng)
但是在大部分處理情況在開發(fā)環(huán)境中沒有嚴(yán)格要求的, 我們往往習(xí)慣把這些檢查代碼放在UI層,其實是不對的,因為沒有分離邏輯代碼使UI層臃腫而BLL層的代碼很少, 從而造就了BLL層看起來就是一個中轉(zhuǎn)站的錯覺.
轉(zhuǎn)載于:https://www.cnblogs.com/liyueting/p/6394289.html
總結(jié)
以上是生活随笔為你收集整理的DAL,IDAL,BLL,Factory作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java springMVC SSM 操
- 下一篇: Codeforces Round #39