.Net三層架構(gòu)

希望朋友們留下自己對(duì)三層架構(gòu)的理解。液茎。逞姿。三層體系結(jié)構(gòu)的概念用戶界面表示層(USL)業(yè)務(wù)邏輯層(BLL)數(shù)據(jù)訪問層(DAL)BLL將USL與DAL隔開了辞嗡,并且加入了業(yè)務(wù)規(guī)則各層的作用1:數(shù)據(jù)數(shù)據(jù)訪問層:主要是對(duì)原始數(shù)據(jù)(數(shù)據(jù)庫(kù)或者文本文件等存放數(shù)據(jù)的形式)的操作層,而不是指原始數(shù)據(jù)滞造,也就是說续室,是對(duì)數(shù)據(jù)的操作,而不是數(shù)據(jù)庫(kù),具體為業(yè)務(wù)邏輯層或表示層提供數(shù)據(jù)服務(wù).2:業(yè)務(wù)邏輯層:主要是針對(duì)具體的問題的操作谒养,也可以理解成對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理挺狰,如果說數(shù)據(jù)層是積木,那邏輯層就是對(duì)這些積木的搭建蝴光。3:表示層:主要表示W(wǎng)EB方式,也可以表示成WINFORM方式,WEB方式也可以表現(xiàn)成:aspx, 如果邏輯層相當(dāng)強(qiáng)大和完善,無論表現(xiàn)層如何定義和更改,邏輯層都能完善地提供服務(wù)她渴。具體的區(qū)分方法1:數(shù)據(jù)數(shù)據(jù)訪問層:主要看你的數(shù)據(jù)層里面有沒有包含邏輯處理达址,實(shí)際上他的各個(gè)函數(shù)主要完成各個(gè)對(duì)數(shù)據(jù)文件的操作蔑祟。而不必管其他操作。2:業(yè)務(wù)邏輯層:主要負(fù)責(zé)對(duì)數(shù)據(jù)層的操作沉唠。也就是說把一些數(shù)據(jù)層的操作進(jìn)行組合疆虚。3:表示層:主要對(duì)用戶的請(qǐng)求接受,以及數(shù)據(jù)的返回满葛,為客戶端提供應(yīng)用程序的訪問径簿。三層結(jié)構(gòu)解釋所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫(kù)之間加入了一個(gè)中間層嘀韧,也叫組件層篇亭。這里所說的三層體系,不是指物理上的三層锄贷,不是簡(jiǎn)單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu)译蒂,也不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層谊却,即使這三個(gè)層放置到一臺(tái)機(jī)器上柔昼。 三層體系的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問炎辨、合法性校驗(yàn)等工作放到了中間層進(jìn)行處理捕透。通常情況下,客戶端不直接與數(shù)據(jù)庫(kù)進(jìn)行交互碴萧,而是通過COM/DCOM通訊與中間層建立連接乙嘀,再經(jīng)由中間層與數(shù)據(jù)庫(kù)進(jìn)行交換.開發(fā)人員可以將應(yīng)用的商業(yè)邏輯放在中間層應(yīng)用服務(wù)器上,把應(yīng)用的業(yè)務(wù)邏輯與用戶界面分開破喻。在保證客戶端功能的前提下虎谢,為用戶提供一個(gè)簡(jiǎn)潔的界面。這意味著如果需要修改應(yīng)用程序代碼低缩,只需要對(duì)中間層應(yīng)用服務(wù)器進(jìn)行修改嘉冒,而不用修改成千上萬(wàn)的客戶端應(yīng)用程序曹货。從而使開發(fā)人員可以專注于應(yīng)用系統(tǒng)核心業(yè)務(wù)邏輯的分析、設(shè)計(jì)和開發(fā)讳推,簡(jiǎn)化了應(yīng)用系統(tǒng)的開發(fā)顶籽、更新和升級(jí)工作。那么為什么要應(yīng)用“中間業(yè)務(wù)層”呢银觅?舉些例子:???? 我們假設(shè)有一段登錄代碼礼饱,則可以這樣處理Web程序,外觀層負(fù)責(zé)接收前臺(tái)頁(yè)面的數(shù)據(jù)究驴,然后傳給中間層镊绪,中間層對(duì)數(shù)據(jù)進(jìn)行處理,比如格式化洒忧,防SQL注入等等一些蝴韭,這樣的數(shù)據(jù)再傳給數(shù)據(jù)訪問層然后與數(shù)據(jù)庫(kù)進(jìn)行操作,比如與數(shù)據(jù)庫(kù)的用戶名和密碼匹配等等一些代碼熙侍¢“中間業(yè)務(wù)層”的用途有很多,例如:驗(yàn)證用戶輸入數(shù)據(jù)蛉抓、緩存從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)等等……但是庆尘,“中間業(yè)務(wù)層”的實(shí)際目的是將“數(shù)據(jù)訪問層”的最基礎(chǔ)的存儲(chǔ)邏輯組合起來,形成一種業(yè)務(wù)規(guī)則巷送。例如:“在一個(gè)購(gòu)物網(wǎng)站中有這樣的一個(gè)規(guī)則:在該網(wǎng)站第一次購(gòu)物的用戶驶忌,系統(tǒng)為其自動(dòng)注冊(cè)”。這樣的業(yè)務(wù)邏輯放在中間層最合適:?在“數(shù)據(jù)訪問層”中笑跛,最好不要出現(xiàn)任何“業(yè)務(wù)邏輯”付魔!也就是說,要保證“數(shù)據(jù)訪問層”的中的函數(shù)功能的原子性堡牡!即最小性和不可再分抒抬。“數(shù)據(jù)訪問層”只管負(fù)責(zé)存儲(chǔ)或讀取數(shù)據(jù)就可以了晤柄。ASP.NET中的三層結(jié)構(gòu)說明完善的三層結(jié)構(gòu)的要求是:修改表現(xiàn)層而不用修改邏輯層,修改邏輯層而不用修改數(shù)據(jù)層擦剑。否則你的應(yīng)用是不是多層結(jié)構(gòu),或者說是層結(jié)構(gòu)的劃分和組織上是不是有問題就很難說.不同的應(yīng)用有不同的理解,這只是一個(gè)概念的問題.理解ASP.NET中的三層結(jié)構(gòu)——為什么要分三層芥颈?我們用三層結(jié)構(gòu)主要是使項(xiàng)目結(jié)構(gòu)更清楚惠勒,分工更明確,有利于后期的維護(hù)和升級(jí)爬坑。它未必會(huì)提升性能纠屋,因?yàn)楫?dāng)子程序模塊未執(zhí)行結(jié)束時(shí),主程序模塊只能處于等待狀態(tài)盾计。這說明將應(yīng)用程序劃分層次售担,會(huì)帶來其執(zhí)行速度上的一些損失赁遗。但從團(tuán)隊(duì)開發(fā)效率角度上來講卻可以感受到大不相同的效果。需要說明一下族铆,三層結(jié)構(gòu)不是.NET的專利岩四,也不是專門用在數(shù)據(jù)庫(kù)上的技術(shù)。它是一種更加普適的架構(gòu)設(shè)計(jì)理念哥攘。此種架構(gòu)要在數(shù)據(jù)庫(kù)設(shè)計(jì)上注意表之間的關(guān)系剖煌,盡力滿足主與子的關(guān)系。在功能上對(duì)用戶要有一定的限制逝淹,不要表現(xiàn)在對(duì)于子表的刪除操作一定要慎重耕姊,以免造成主表與子表的數(shù)據(jù)在邏輯上出現(xiàn)的主表的外鍵在子表中沒有相對(duì)應(yīng)的值。對(duì)于表的綜合查詢方法是:先對(duì)主表查詢栅葡,調(diào)用主表所對(duì)應(yīng)的DL茉兰。再根據(jù)主表的記錄分別對(duì)每一個(gè)子表進(jìn)行查詢。將自表的查詢結(jié)果添加的主表后妥畏,形成一個(gè)大的查詢集合邦邦。對(duì)于表的操作(增刪改):此時(shí)只對(duì)主表進(jìn)行操作,調(diào)用主表對(duì)應(yīng)的DL中的操作方法醉蚁。RL層是邏輯判斷層,主要是對(duì)頁(yè)面上傳入的數(shù)據(jù)進(jìn)行邏輯判斷鬼店。RL層之上就是UI如何建立一個(gè)三層體系結(jié)構(gòu)解決方案新建一個(gè)空白解決方案网棍。然后: ????“添加”-“新建項(xiàng)目”-“其他項(xiàng)目”-“企業(yè)級(jí)模版項(xiàng)目”-“C#生成塊”-“數(shù)據(jù)訪問”(數(shù)據(jù)層,下簡(jiǎn)稱D層) ????“添加”-“新建項(xiàng)目”-“其他項(xiàng)目”-“企業(yè)級(jí)模版項(xiàng)目”-“C#生成塊”-“業(yè)務(wù)規(guī)則”(業(yè)務(wù)層妇智,下簡(jiǎn)稱C層) ????“添加”-“新建項(xiàng)目”-“其他項(xiàng)目”-“企業(yè)級(jí)模版項(xiàng)目”-“C#生成塊”-“Web用戶界面”(界面層滥玷,下簡(jiǎn)稱U層) ????右鍵點(diǎn)“解決方案”-“項(xiàng)目依賴項(xiàng)”,設(shè)置U依賴于D巍棱、C惑畴,C依賴于D。 ????對(duì)U添加引用D航徙、C如贷,對(duì)C添加引用D。 ????到此為止到踏,一個(gè)三層的架子建立起來了杠袱。我上面說的很具體很“傻瓜”,知道的人覺得我廢話窝稿,其實(shí)我這段時(shí)間很強(qiáng)烈的感覺到非常多的人其實(shí)對(duì)這個(gè)簡(jiǎn)單的過程完全不了解楣富。雖然不反對(duì)建2個(gè)“空項(xiàng)目”和1個(gè)“Asp ?? net ?? Web應(yīng)用程序項(xiàng)目”也可以作為3層的框架,而且相當(dāng)多的人認(rèn)為其實(shí)這些“企業(yè)級(jí)模板項(xiàng)目”其實(shí)就是個(gè)空項(xiàng)目伴榔,這是一個(gè)誤區(qū)纹蝴。沒錯(cuò)庄萎,企業(yè)級(jí)模板項(xiàng)目你從解決方案資源管理器里看它是個(gè)什么也沒有的,但是你可以用記事本打開項(xiàng)目文件塘安,看見不同了吧惨恭??有些東西在背后耙旦,你是看不見的脱羡,不過系統(tǒng)已經(jīng)做好了。也就是說免都,如果你在C層里的某個(gè)類里“using ?? System ?? Data ?? SqlClineit”锉罐,或者使用一個(gè)SqlConnection對(duì)象,編譯時(shí)候不會(huì)出錯(cuò)绕娘,但是會(huì)在“任務(wù)列表”里生成一些“策略警告”脓规,警告你在C層里不要放應(yīng)該放在D層的東西(雖然就程序來說沒錯(cuò),但是可讀性可維護(hù)性就打了折扣)而這種功能险领,空項(xiàng)目是無法給你的侨舆。在新TraceLWord3中,應(yīng)用了“企業(yè)級(jí)模板項(xiàng)目”绢陌。把原來的LWordTask.cs挨下,并放置到一個(gè)單一的項(xiàng)目里,項(xiàng)目名稱為:AccessTask脐湾。解決方案中又新建了一個(gè)名稱為:InterService的項(xiàng)目臭笆,該項(xiàng)目中包含一個(gè)LWordService.cs程序文件,它便是“中間業(yè)務(wù)層”程序秤掌。為了不重復(fù)命名愁铺,TraceLWord3的網(wǎng)站被放置到了WebUI項(xiàng)目中。更完整的代碼闻鉴,可以在CodePackage/TraceLWord3目錄中找到——?????面象對(duì)象與實(shí)際的結(jié)合我們知道建橋需要磚塊茵乱,應(yīng)該是先準(zhǔn)備好磚再來建橋,不過為了講解上的順序性和連貫性孟岛,簡(jiǎn)單性瓶竭。我們先建橋,建的過程中需要磚塊再現(xiàn)做蚀苛,這樣就不會(huì)多出來“橋不需要的東西”在验。注意在實(shí)際中,還是應(yīng)該先準(zhǔn)備磚塊堵未。?????U層其實(shí)就是橋腋舌,C層是磚塊,D層是原料(石頭渗蟹、沙子)块饺。這也解釋前面為什么U層要引用赞辩、依賴D層(而不是U對(duì)C,C對(duì)D的層次)授艰,因?yàn)闃虺诵枰u頭辨嗽,其實(shí)也需要石頭沙子』刺冢“三層結(jié)構(gòu)”的缺點(diǎn)有些網(wǎng)友在讀完這篇文章前作之后糟需,對(duì)我提出了一些質(zhì)疑,這提醒我文章至此還沒有提及“三層結(jié)構(gòu)”的缺點(diǎn)谷朝≈扪海“三層結(jié)構(gòu)”這個(gè)詞眼似乎一直都很熱門,究其原因圆凰,或許是這種開發(fā)模式應(yīng)用的比較普遍杈帐。但是“三層結(jié)構(gòu)”卻并不是百試百靈的“萬(wàn)靈藥”,它也存在著缺點(diǎn)专钉。下面就來說說它的缺點(diǎn)……“三層結(jié)構(gòu)”開發(fā)模式的一個(gè)非常明顯的缺點(diǎn)就是其執(zhí)行速度不夠快挑童。當(dāng)然這個(gè)“執(zhí)行速度”是相對(duì)于非分層的應(yīng)用程序來說的。從文中所給出的時(shí)序圖來看跃须,也明顯的暴露了這一缺點(diǎn)站叼。TraceLWord1和TraceLWord2沒有分層,直接調(diào)用的ADO.NET所提供的類來獲取數(shù)據(jù)回怜。但是大年,TraceLWord6確要經(jīng)過多次調(diào)用才能獲取到數(shù)據(jù)。在子程序模塊程序沒有返回時(shí)玉雾,主程序模塊只能處于等待狀態(tài)。所以在執(zhí)行速度上轻要,留言板的版本越高复旬,排名卻越靠后〕迥啵“三層結(jié)構(gòu)”開發(fā)模式驹碍,不適用于對(duì)執(zhí)行速度要求過于苛刻的系統(tǒng),例如:在線訂票凡恍,在線炒股等等……它比較擅長(zhǎng)于商業(yè)規(guī)則容易變化的系統(tǒng)志秃。“三層結(jié)構(gòu)”開發(fā)模式嚼酝,入門難度夠高浮还,難于理解和學(xué)習(xí)。這是對(duì)于初學(xué)程序設(shè)計(jì)的人來說的闽巩。以這種模式開發(fā)出來的軟件钧舌,代碼量通常要稍稍多一些担汤。這往往會(huì)令初學(xué)者淹沒在茫茫的代碼之中。望之生畏洼冻,對(duì)其產(chǎn)生反感崭歧,也是可以理解的……其實(shí),無論哪一種開發(fā)模式或方法撞牢,都是有利有弊的率碾。不會(huì)存在一種“萬(wàn)用法”可以解決任何問題。所以“三層結(jié)構(gòu)”這個(gè)詞眼也不會(huì)是個(gè)例外屋彪!是否采用這個(gè)模式進(jìn)行系統(tǒng)開發(fā)所宰,要作出比較、權(quán)衡之后才可以撼班。切忌濫用!參與資料MainDoc.rar ?? (《淺談“三層結(jié)構(gòu)”原理與用意》1.30M) ?????http://www.bincess.cn/Downloads/MainDoc.rar?????petshop 4.0的體系結(jié)構(gòu)(只是稍微看了一下歧匈,了解一下結(jié)構(gòu))簡(jiǎn)介:PetShop隨著版本的不斷更新,至現(xiàn)在基于.Net 2.0的PetShop4.0為止砰嘁,整個(gè)設(shè)計(jì)逐漸變得成熟而優(yōu)雅件炉,而且有很多可以借鑒之處。PetShop是一個(gè)小型的項(xiàng)目矮湘,系統(tǒng)架構(gòu)與代碼都比較簡(jiǎn)單斟冕,卻也凸現(xiàn)了許多頗有價(jià)值的設(shè)計(jì)與開發(fā)理念。下載地址:http://msdn.microsoft.com/en-us/library/aa479070.aspxPetShop架構(gòu)設(shè)計(jì)三層”應(yīng)用結(jié)構(gòu):數(shù)據(jù)訪問層缅阳、業(yè)務(wù)邏輯層(領(lǐng)域?qū)樱┛纳摺⒈硎緦臃謱拥脑O(shè)計(jì)的特點(diǎn):結(jié)構(gòu)清晰、耦合度低便于系統(tǒng)的擴(kuò)展利于開發(fā)任務(wù)同步進(jìn)行降低了一定的性能.Net ?? PetShop ?? 4.0 ?? 配置文件屬性管理http://blog.csdn.net/fengfangfang/archive/2006/09/07/1189061.aspx???????.Net ?? PetShop ?? 4.0 ?? 緩存處理 ??????http://blog.csdn.net/fengfangfang/archive/2006/09/06/1185077.aspx???????.Net ?? PetShop ?? 4.0 ?? 消息處理 ??????http://blog.csdn.net/fengfangfang/archive/2006/09/08/1194896.aspx???????每個(gè)功能都使用了工廠模式?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末十办,一起剝皮案震驚了整個(gè)濱河市秀撇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌向族,老刑警劉巖呵燕,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異件相,居然都是意外死亡再扭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門夜矗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛范,“玉大人,你說我怎么就攤上這事紊撕“盏矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柠傍。 經(jīng)常有香客問我麸俘,道長(zhǎng),這世上最難降的妖魔是什么惧笛? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任从媚,我火速辦了婚禮,結(jié)果婚禮上患整,老公的妹妹穿的比我還像新娘拜效。我一直安慰自己,他們只是感情好各谚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布紧憾。 她就那樣靜靜地躺著,像睡著了一般昌渤。 火紅的嫁衣襯著肌膚如雪赴穗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天膀息,我揣著相機(jī)與錄音般眉,去河邊找鬼。 笑死潜支,一個(gè)胖子當(dāng)著我的面吹牛甸赃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冗酿,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埠对,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了裁替?” 一聲冷哼從身側(cè)響起项玛,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弱判,沒想到半個(gè)月后稍计,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裕循,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了净刮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剥哑。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淹父,靈堂內(nèi)的尸體忽然破棺而出株婴,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布困介,位于F島的核電站大审,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏座哩。R本人自食惡果不足惜徒扶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望根穷。 院中可真熱鬧姜骡,春花似錦、人聲如沸屿良。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尘惧。三九已至康栈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喷橙,已是汗流浹背啥么。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留重慢,地道東北人饥臂。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像似踱,于是被迫代替她去往敵國(guó)和親隅熙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容