小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

淺談三層架構(gòu)

 昵稱39360 2011-08-03

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

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

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

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

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

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

2. 在右側(cè)的“資源管理器”中,選中當(dāng)前解決方案,右鍵添加->新建項(xiàng)目->類庫(ClassLibrary),分別創(chuàng)建BLL,DAL,UL類 庫。(若添加后看不到解決方案則在菜單->工具->選項(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層引用。所以需要相互添加引用,方法是在類庫上點(diǎn)擊右鍵->添加引用->項(xiàng)目->選擇其他類庫。并且在具體類中引入命名空間(using namespace)。

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

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

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

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

 

再寫DAL層:

再寫B(tài)LL層:

 

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

 

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

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

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

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

2.業(yè)務(wù)邏輯層(BLL)不會(huì)直接與數(shù)據(jù)庫交互,他與數(shù)據(jù)庫的交互是通過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è)注冊用戶,就這么麻煩,所以對于小項(xiàng)目來說,費(fèi)這么大勁換取一個(gè)相對較清晰的分層結(jié)構(gòu)是不劃算的。

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

    0條評(píng)論

    發(fā)表

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

    類似文章 更多