国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MVC引入SERVICE層 提高代碼重用性 溝通CONTROL和MODEL

MVC是web開發(fā)中常見的程序結(jié)構(gòu)。

簡(jiǎn)單的mvc結(jié)構(gòu)如下:

view層:顯示層。 

control層:業(yè)務(wù)層,集合了各種action。 

model層:模型層,一般和數(shù)據(jù)打交道。簡(jiǎn)單的sample:一個(gè)表對(duì)應(yīng)一個(gè)model類。

其中control層調(diào)用model層的方法,實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問(wèn)。 

采用這樣的結(jié)構(gòu)在一定程度上,可以做到代碼清晰,較容易擴(kuò)展,代碼的管理復(fù)雜度較低。

但是如果是業(yè)務(wù)很多,邏輯又很復(fù)雜的網(wǎng)站,如果再加上開發(fā)人員的水平參差不齊,那必然會(huì)導(dǎo)致下面的情況:

1 action中的代碼越來(lái)越長(zhǎng),邏輯越來(lái)越復(fù)雜,不同action之間看起來(lái)有很多可以重用的代碼, 但是真要進(jìn)行重構(gòu)的話,又非常困難。

2 model層中包含的方法越來(lái)越多,有些方法也過(guò)于復(fù)雜。甚至在不少方法中還包含了業(yè)務(wù)邏輯。

3 代碼的修改,還是牽一發(fā)而動(dòng)全身。

4 代碼難以進(jìn)行自動(dòng)化測(cè)試。

 

本來(lái)以為引入了mvc,程序的管理復(fù)雜度問(wèn)題就高枕無(wú)憂了,但現(xiàn)在又面臨了相同的問(wèn)題了。

 

以我最近的所學(xué)看,在mvc中再引入service層,可以在很大程度上避免或者緩解上述問(wèn)題。

原有的mvc結(jié)構(gòu)改成如下:

1 view層:顯示層。 

2 control層:業(yè)務(wù)層,集合了各種action。 

3 service層。

4 DAO層。

原來(lái)的model層不見了,增加了service層和DAO層。DAO,即Data Access Object,數(shù)據(jù)訪問(wèn)接口,數(shù)據(jù)訪問(wèn):顧名思義就是與數(shù)據(jù)庫(kù)打交道。

 

在這個(gè)結(jié)構(gòu)中,control不直接和DAO聯(lián)系,

需要操作數(shù)據(jù)的時(shí)候,通過(guò)service層訪問(wèn)DAO層來(lái)實(shí)現(xiàn)。

service層做的事情,不僅僅是調(diào)用DAO操作數(shù)據(jù),還會(huì)包含了一定的業(yè)務(wù)邏輯。整個(gè)程序的設(shè)計(jì),也變成了針對(duì)服務(wù)進(jìn)行設(shè)計(jì)。

 

這樣做的好處是:

1 control層中的action得以精簡(jiǎn),因?yàn)閍ction中的一些邏輯,被重構(gòu)成一個(gè)個(gè)的服務(wù)。而不同的action也可以重用服務(wù)了。

2 只負(fù)責(zé)和數(shù)據(jù)打交道的DAO層,相比之前的model層,也得以精簡(jiǎn)(DAO層盡量只做最原子的數(shù)據(jù)操作,不同數(shù)據(jù)操作之間的聯(lián)系,這邊不考慮,那是service層的事情)。 

3 service層可以實(shí)現(xiàn)很大程度上的代碼復(fù)用,程序的功能封裝更清晰了。

4 由于service層更加清晰的定義了應(yīng)用程序的邊界,那么對(duì)于各個(gè)service函數(shù)(對(duì)應(yīng)某個(gè)服務(wù)/應(yīng)用),要做到自動(dòng)化測(cè)試就方便多了。WEB程序如何做到能方便的進(jìn)行單元測(cè)試,這是一直困擾我的難題,這樣的設(shè)計(jì)似乎真的可行了~ 

5 開發(fā)人員的工作分配,理論上真的可以按層次劃分了。只是理論上~

 

同時(shí),這樣的設(shè)計(jì)模式也是存在一定的缺點(diǎn)的:

層次太多,剛接觸的開發(fā)人員理解起來(lái)比簡(jiǎn)單的mvc結(jié)構(gòu)費(fèi)時(shí);

service層的設(shè)計(jì)需要一定的功力,因?yàn)閍ction中和model層的邏輯在很大程度上轉(zhuǎn)移到這里了。

 

但整體上看,service Layer的引入,更加清晰的定義了應(yīng)用程序的邊界,提供了一系列可以重用的操作集合。這對(duì)于網(wǎng)站的可擴(kuò)展性和可維護(hù)性是非常有幫助的。

 

當(dāng)然,如果網(wǎng)站的業(yè)務(wù)邏輯并不復(fù)雜,完全沒(méi)必要用這樣的設(shè)計(jì)。過(guò)度設(shè)計(jì)是萬(wàn)惡之源~


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
GoFrame代碼分層設(shè)計(jì)
系統(tǒng)架構(gòu)師
MVC 與三層架構(gòu)
404
Web開發(fā)之劃分層次
JAVA中Action層,Service層,modle層和Dao層的功能區(qū)分
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服