三層架構(gòu)剛學(xué)一星期,有點(diǎn)迷糊。對(duì)于三層我左思右想,如何理清思路?如何與實(shí)際生活聯(lián)系?今天稍微簡(jiǎn)單的整理了一下思路。
一、典型三層架構(gòu)應(yīng)用場(chǎng)景。
服務(wù)員:只管接待客人;
廚師:只管做客人點(diǎn)的菜;
采購(gòu)員:只管按客人點(diǎn)菜的要求采購(gòu)食材;
他們各負(fù)其職,服務(wù)員不用了解廚師如何做菜,不用了解采購(gòu)員如何采購(gòu)食材;廚師不用知道服務(wù)員接待了哪位客人,不用知道采購(gòu)員如何采購(gòu)食材;同樣,采購(gòu)員不用知道服務(wù)員接待了哪位客人,不用知道廚師如何做菜。
二、什么是三層架構(gòu)?
表現(xiàn)層(view視圖層):主要是指與用戶交互的界面。用于接收用戶輸入的數(shù)據(jù)和顯示處理后用戶需要的數(shù)據(jù)。簡(jiǎn)單說(shuō),給用戶看,展示的就是一個(gè)界面,如aspx\html
業(yè)務(wù)邏輯層(control控制層):dal業(yè)務(wù)邏輯具體包含:驗(yàn)證、計(jì)算、業(yè)務(wù)規(guī)則等等。主要實(shí)現(xiàn)對(duì)數(shù)據(jù)的增、刪、改、查(主要是ado.net內(nèi)容)。
實(shí)體層(model層):用于便于層和層之間的數(shù)據(jù)傳遞.實(shí)際上是對(duì)應(yīng)著數(shù)據(jù)庫(kù)里的每張表的,我們把表里的字段封裝在1個(gè)實(shí)體對(duì)象里 當(dāng)你想用哪個(gè)字段 你就就通過(guò)該實(shí)體對(duì)象的get() set() 把那個(gè)字段提取出來(lái)。
注意:1)Model層對(duì)應(yīng)的是類、及字段,和數(shù)據(jù)庫(kù)一一對(duì)應(yīng)。
2)數(shù)據(jù)庫(kù)對(duì)應(yīng)的是表及字段
3)內(nèi)存就是一個(gè)對(duì)象,程序中的一個(gè)對(duì)象,就是數(shù)據(jù)表中的某一行數(shù)據(jù)
三、層框架原理
1、用戶在界面視圖層,輸入內(nèi)容,例如把用戶名,密碼等傳到控制層dal
2、dal控制層調(diào)用增刪改查的方法,實(shí)現(xiàn)增刪改查(實(shí)質(zhì)用的是ado.net)。
3、運(yùn)行之后,把數(shù)據(jù)存在內(nèi)存中,再經(jīng)過(guò)cpu處理,跟數(shù)據(jù)庫(kù)處理。
四、三層框架搭建實(shí)操
1、搭建Model層
第一步:創(chuàng)建一個(gè)model文件夾
第二步:拷入model.base
第三步:在vs中添加model文件,并添加Model.Base.csproj文件
第四步:添加一個(gè)和我們數(shù)據(jù)庫(kù)對(duì)應(yīng)的一個(gè)model—新建項(xiàng)—windows—類庫(kù)—路徑放在剛才建好的model文件夾中,然后取名字,跟上面對(duì)應(yīng)(數(shù)據(jù)庫(kù)的名字,即和數(shù)據(jù)庫(kù)一一對(duì)應(yīng)),如Model.fuzhifang
注意:Model.fuzhifang是基于Model.Base的
第五步:Model層就建好了
2、搭建dal層
第一步:創(chuàng)建一個(gè)dal文件夾,需要兩個(gè)東西Dal.Base和Utility,拷入兩個(gè)類庫(kù)文件
第二步:在vs中新建dal文件
1)添加dal.base中的DAL.Base.csproj文件
2)添加utility中Utility.csproj文件
第三步:創(chuàng)建一個(gè)類庫(kù)文件,就是和數(shù)據(jù)庫(kù)進(jìn)行交互的,增刪改查全部都放在里面
dal—新建項(xiàng)—windows—類庫(kù)—路徑放在剛才建好的dal文件夾中,然后取名字,dal.fuzhifang注意:創(chuàng)建一個(gè)類庫(kù)文件—即數(shù)據(jù)庫(kù)中對(duì)應(yīng)的內(nèi)容
第四步:所有文件建好了
3、修改程序集路徑
知識(shí)點(diǎn):類庫(kù)文件生成之后就是一個(gè)程序集,所以就要生成一個(gè)程序集。
原因:每個(gè)類庫(kù)文件默認(rèn)生成程序集的位置是不同的,不利于維護(hù),所以最好每個(gè)類庫(kù)文件統(tǒng)一在統(tǒng)一目錄下,調(diào)用的時(shí)候比較方便。
操作方法如下:
model文件修改路徑(全部放在Reference中)
Model.Base—右鍵—屬性—生成—輸出路徑--E:\study\mvcthress\Reference\(選擇修改即可)
4、各層間引用
1)Model層
第一步:生成Model.Base
第二步:生成Model.fuzhifang中則需要引用Model.Base
操作:Model.fuzhifang-引用-右鍵-添加引用—?jiǎng)偛沤ê玫腞eference 中的com.Model.Base.dll
第三步:Model.fuzhifang生成程序集
操作:Model.fuzhifang-右鍵-屬性-輸出路徑--E:\study\mvcthress\Reference\(選擇修改即可)--重新生成
2)DAL層
第一步:生成Utility? 里面封裝了很多方法,比如說(shuō)過(guò)濾內(nèi)容,比如SQL注入,也需要設(shè)置路徑
更改路徑:Model.fuzhifang-右鍵-屬性-輸出路徑--E:\study\mvcthress\Reference\(選擇修改即可)
第二步:生成DAL.Base ,引入com.Utility.dll\com.Model.Base.dll
需要把下面5個(gè)文件加到自己的Reference中E:\study\mvcthress\Reference\
DAL.Base不需要寫SQL語(yǔ)句,把表的名稱做一個(gè)變量傳進(jìn)來(lái)
第三步:生成DAL.fuzhifang(自己新建),引入com.Model.Base.dll、com.Utility.dll、Model.fuzhifang.dll、com.DAL.Base.dll
3)web網(wǎng)站層,則全部都要引入
"Model.fuzhifang.dll" "com.DAL.Base.dll" "com.Model.Base.dll" "com.Utility.dll" "dal.fuzhifang.dll"
五、三層架構(gòu)優(yōu)劣勢(shì)
優(yōu)勢(shì):1,結(jié)構(gòu)清晰、耦合度低,2,可維護(hù)性高,可擴(kuò)展性高;3,利于開(kāi)發(fā)任務(wù)同步進(jìn)行;容易適應(yīng)需求變化
劣勢(shì):1、降低了系統(tǒng)的性能。這是不言而喻的。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫(kù),以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過(guò)中間層來(lái)完成。2、有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層中都增加相應(yīng)的代碼3、增加了代碼量,增加了工作量
六、結(jié)束語(yǔ)
“三層結(jié)構(gòu)”開(kāi)發(fā)模式,入門難度夠高,難于理解和學(xué)習(xí)。這是對(duì)于初學(xué)程序設(shè)計(jì)的人來(lái)說(shuō)的。以這種模式開(kāi)發(fā)出來(lái)的軟件,代碼量通常要稍稍多一些。這往往會(huì)令初學(xué)者淹沒(méi)在茫茫的代碼之中。望之生畏,對(duì)其產(chǎn)生反感,也是可以理解的……