一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

淺談三層架構(gòu)

 昵稱(chēng)39360 2011-08-03

三層架構(gòu)并不是MVC,MVC是一個(gè)很早就有的經(jīng)典的程序設(shè)計(jì)模式,M-V-C分為三 層,M(Model)-V(View)-C(Control)。而web開(kāi)發(fā)中的三層架構(gòu)是指:數(shù)據(jù)訪問(wèn)層(DAL- DatabaseAccessLayer),業(yè)務(wù)邏輯層(BLL-BusinessLoginLayer),以及用戶界面層(UI- UserInterface,實(shí)際就是網(wǎng)頁(yè)后臺(tái)的具體調(diào)用BLL層)。這個(gè)是基本概念。曾經(jīng)我以為三層架構(gòu)就是在AppCode中,分為三個(gè)大類(lèi)與若干小 類(lèi),各司其職。在經(jīng)過(guò)一番洗禮后,才發(fā)覺(jué)多么的無(wú)知。

首先AppCode中,放的是通用類(lèi),如數(shù)據(jù)庫(kù)通用類(lèi),實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接,基本的SqlCommand創(chuàng)建,自定義CRUD的方法等,與三層架構(gòu)毫無(wú)關(guān)系,就是常用的開(kāi)發(fā)模式中存放類(lèi)(Class)的文件夾。

其次,當(dāng)使用三層架構(gòu)時(shí),一定是在大項(xiàng)目中,因?yàn)槿龑蛹軜?gòu)的目的是提高項(xiàng)目的松散性和降低項(xiàng)目的耦合度,使之更容易擴(kuò)展或者維護(hù)。小項(xiàng)目使用了三層架構(gòu),由于過(guò)度的在意分層而導(dǎo)致了項(xiàng)目的復(fù)雜度增加。

創(chuàng) 建三層架構(gòu)的應(yīng)用程序。我們必須對(duì)這三層分別創(chuàng)建不同的類(lèi)庫(kù)(ClassLibrary),而不是普通的類(lèi)(Class)。我們對(duì)于任何一個(gè)模塊或者功能 進(jìn)行OOP,把它擴(kuò)展為對(duì)象(面向?qū)ο蟮乃枷刖褪牵簩⑺僮鞯哪繕?biāo)當(dāng)成一個(gè)對(duì)象,對(duì)它進(jìn)行的操作,將由對(duì)象自己的方法進(jìn)行,而非外界傳參。譬如注冊(cè)用戶, 用面向過(guò)程的方法事先,就是:public static bool Register(string userName, string userPwd)。若用OO的思想,我們不可將賬號(hào)密碼作為參數(shù)傳入,而是將用戶作為一個(gè)對(duì)象,這個(gè)對(duì)象具有private _userName,和private _userPwd的屬性。在注冊(cè)時(shí),用構(gòu)造函數(shù)初始化一個(gè)新的對(duì)象,User one = new User(userName,userPwd),使之在初始化后具有這兩個(gè)字段的值。然后調(diào)用User類(lèi)中的public static bool Register()方法(注意這個(gè)方法是不進(jìn)行傳參的),而在這個(gè)Register方法中,使用對(duì)象的_userName和_userPwd屬性進(jìn)行注 冊(cè)。),那么,我們?cè)谶@個(gè)對(duì)象中的任何操作都將以該對(duì)象的方法(函數(shù))實(shí)現(xiàn)。

在進(jìn)行三層分類(lèi)時(shí),這樣新建類(lèi)庫(kù)。

1.文件->新建項(xiàng)目->其他項(xiàng)目類(lèi)型->空白解決方案。

2. 在右側(cè)的“資源管理器”中,選中當(dāng)前解決方案,右鍵添加->新建項(xiàng)目->類(lèi)庫(kù)(ClassLibrary),分別創(chuàng)建BLL,DAL,UL類(lèi) 庫(kù)。(若添加后看不到解決方案則在菜單->工具->選項(xiàng)->項(xiàng)目和解決方案->總是顯示解決方案)。

3.右鍵,向解決方案中添加一個(gè)網(wǎng)站(新網(wǎng)站或者現(xiàn)有網(wǎng)站)。

4.根據(jù)需求刪除或者保留默認(rèn)添加項(xiàng)(默認(rèn)的class1.cs或Default.aspx文件)。

這樣一個(gè)三層架構(gòu)的網(wǎng)站雛形就搭建好了。因?yàn)閁I層要被其他兩層引用,DAL層要被BLL層引用。所以需要相互添加引用,方法是在類(lèi)庫(kù)上點(diǎn)擊右鍵->添加引用->項(xiàng)目->選擇其他類(lèi)庫(kù)。并且在具體類(lèi)中引入命名空間(using namespace)。

ps: 類(lèi)庫(kù)其實(shí)就是類(lèi)的集合,三層架構(gòu)的目的就是,將同一項(xiàng)目的不同模塊都劃分為各自的三層,各司其職,將具體實(shí)現(xiàn)方法用類(lèi)寫(xiě)出,添加到該層的類(lèi)庫(kù)中,這樣,一 個(gè)網(wǎng)站下的類(lèi)庫(kù)就只有三層,每一層中都包含了各個(gè)模塊相對(duì)應(yīng)層的實(shí)現(xiàn)方法。在以后修改或擴(kuò)展時(shí),在對(duì)應(yīng)層中進(jìn)行操作就可以了。

一 般的項(xiàng)目,涉及最多的就是對(duì)數(shù)據(jù)庫(kù)的CRUD,DAL層只負(fù)責(zé)與數(shù)據(jù)庫(kù)的交互,BLL層是最重要的一層,他負(fù)責(zé)將DAL層的的結(jié)果呈現(xiàn)給UI層,但是恰恰 BLL層的存在似乎有點(diǎn)雞肋,他起到的僅僅是轉(zhuǎn)發(fā)DAL層數(shù)據(jù)的作用,而具體的邏輯操作是與數(shù)據(jù)庫(kù)的交互,應(yīng)該寫(xiě)在DAL層,這就好像BLL層是在重復(fù) DAL層的勞動(dòng)一樣,其實(shí)BLL層的作用在于除了調(diào)用DAL層訪問(wèn)數(shù)據(jù)庫(kù),還可以進(jìn)行邏輯判斷,當(dāng)符合的時(shí)候,才進(jìn)行允許進(jìn)行DAL的操作,或者進(jìn)行額外 的操作(如加密,轉(zhuǎn)換等)。而DAL層可不管這些,他只管進(jìn)行CRUD的動(dòng)作。UI層就是操作抽象出來(lái)的實(shí)體對(duì)象,它包含了各種屬性。

一個(gè)三層架構(gòu)的小例子:注冊(cè)新用戶。

先寫(xiě)模塊的實(shí)體類(lèi),是數(shù)據(jù)庫(kù)中表的抽象,假設(shè)數(shù)據(jù)庫(kù)中注冊(cè)信息只有賬號(hào),密碼兩個(gè)字段。那么抽象到實(shí)體類(lèi)就是這樣:

 

再寫(xiě)DAL層:

再寫(xiě)B(tài)LL層:

 

最后構(gòu)建UI層代碼,即我們的aspx.cs頁(yè)面代碼,該層應(yīng)該直接調(diào)用BLL層的方法。該頁(yè)面引用BLL和Entity的命名空間,并向Button控件注冊(cè)事件:

 

這樣一個(gè)小的三層架構(gòu)程序就出來(lái)了。

這個(gè)程序中,操作的實(shí)體為UserInfo表的抽象。在DAL層進(jìn)行了AddUser()的方法,在BLL層也進(jìn)行了AddUser()的方法,唯一的區(qū)別是BLL層做了邏輯判斷,如果用戶名存在,則注冊(cè)失敗。

三層架構(gòu)的特點(diǎn):

1.數(shù)據(jù)庫(kù)訪問(wèn)層(DAL)僅提供對(duì)數(shù)據(jù)庫(kù)的CRUD操作,而不管操作后的結(jié)果,也不管邏輯過(guò)程(譬如同名用戶,不合法用戶名)。

2.業(yè)務(wù)邏輯層(BLL)不會(huì)直接與數(shù)據(jù)庫(kù)交互,他與數(shù)據(jù)庫(kù)的交互是通過(guò)DAL提供的方法。在調(diào)用這些方法前,要加入自己的邏輯判斷或者業(yè)務(wù)處理。另外業(yè)務(wù)邏輯層(BLL)還有可能不會(huì)去調(diào)用DAL層的方法,而是進(jìn)行其他業(yè)務(wù)處理。

3.用戶界面層(UI)層是不會(huì)調(diào)用DAL層的,他只調(diào)用BLL層提供的方法,再由BLL層自己決定是否繼續(xù)調(diào)用DAL層。

這個(gè)例子可以看出三層架構(gòu)的優(yōu)點(diǎn)就是結(jié)構(gòu)清晰,容易擴(kuò)展與維護(hù)。缺點(diǎn)就是,復(fù)雜。僅僅一個(gè)注冊(cè)用戶,就這么麻煩,所以對(duì)于小項(xiàng)目來(lái)說(shuō),費(fèi)這么大勁換取一個(gè)相對(duì)較清晰的分層結(jié)構(gòu)是不劃算的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    97人妻精品一区二区三区免| 五月激情五月天综合网| 视频一区中文字幕日韩| 亚洲国产av一二三区| 视频一区日韩经典中文字幕| 樱井知香黑人一区二区| 成人国产激情福利久久| 国产精品一区二区成人在线| 亚洲高清欧美中文字幕| 欧美日韩国产精品第五页| 无套内射美女视频免费在线观看| 天堂网中文字幕在线观看| 日韩国产亚洲一区二区三区| 亚洲人午夜精品射精日韩| 亚洲一区二区三区国产| 国产一区二区三区四区中文| 在线观看国产成人av天堂野外| 粉嫩国产一区二区三区在线| 日本av一区二区不卡| 欧美日韩欧美国产另类| 色丁香一区二区黑人巨大| 欧美成人一区二区三区在线| 国产日韩久久精品一区| 国产午夜福利在线免费观看| 一区二区三区亚洲国产| 国产美女网红精品演绎| 国产偷拍盗摄一区二区| 欧美不卡一区二区在线视频| 日韩不卡一区二区三区色图| 午夜福利视频六七十路熟女| 国产毛片av一区二区三区小说| 欧美国产在线观看精品| 精品国产亚洲免费91| 亚洲精品成人午夜久久| 日韩午夜福利高清在线观看| 日韩少妇人妻中文字幕| 国产精品一区二区三区激情| 欧美一区二区在线日韩| 国产欧美日韩综合精品二区| 视频一区二区黄色线观看| 精品国产亚洲一区二区三区|