一悉抵、簡(jiǎn)述
在軟件開(kāi)發(fā)中肩狂,MVC與三層架構(gòu)這兩個(gè)專業(yè)詞匯經(jīng)常耳聞,同時(shí)總有很多人將它們混為一談姥饰,認(rèn)為三層架構(gòu)就是指MVC傻谁,給它畫(huà)上等號(hào),但實(shí)際上列粪,這是錯(cuò)誤的認(rèn)知审磁,并不是說(shuō)它們沒(méi)有任何關(guān)系,而是MVC與三層架構(gòu)不是簡(jiǎn)單的相等岂座。下面將拿javaweb開(kāi)發(fā)中的MVC(SSM框架)與三層架構(gòu)進(jìn)行比較态蒂,讓大家理清兩者之間的關(guān)系。
二费什、概念
1钾恢、系統(tǒng)架構(gòu)
所謂系統(tǒng)架構(gòu)是指整個(gè)應(yīng)用系統(tǒng)程序大的結(jié)構(gòu),常見(jiàn)的系統(tǒng)架構(gòu)有三層架構(gòu)與MVC。前面已經(jīng)說(shuō)了瘩蚪,三層架構(gòu)與MVC不是簡(jiǎn)單的相等泉懦,它們存在差別,但又聯(lián)系≌钍荩現(xiàn)在可以肯定的是崩哩,這兩種系統(tǒng)架構(gòu)的出現(xiàn),都是為了降低系統(tǒng)模塊間的耦合度言沐。
2琢锋、三層架構(gòu)
三層架構(gòu)是指:視圖層View、服務(wù)層Service呢灶、持久層Dao吴超,分別完成不同的功能。
View層:用于接收用戶提交請(qǐng)求的代碼在這里編寫(xiě)鸯乃。
Service層:系統(tǒng)的業(yè)務(wù)邏輯主要在這里編寫(xiě)鲸阻。
Dao層:直接操作數(shù)據(jù)庫(kù)的代碼在這里編寫(xiě)。
為了更好的降低各層間的耦合度缨睡,在三層架構(gòu)程序設(shè)計(jì)中鸟悴,采用面向抽象編程。即上層對(duì)下層的調(diào)用奖年,是通過(guò)接口實(shí)現(xiàn)的细诸。而下層對(duì)上層的真正服務(wù)提供者,是下層接口的實(shí)現(xiàn)類陋守。服務(wù)標(biāo)準(zhǔn)(接口)是相同的震贵,服務(wù)提供者(實(shí)現(xiàn)類)可以更換。這就實(shí)現(xiàn)了層間的耦合水评。
3猩系、MVC
MVC是指:Model模型、View視圖中燥、Controller控件器寇甸。
View:視圖,為用戶提供使用界面疗涉,與用戶直接進(jìn)行交互拿霉。
Model:模型,承載數(shù)據(jù)咱扣,并對(duì)用戶提交請(qǐng)求進(jìn)行計(jì)算的模塊绽淘。其分為兩類,一類稱為數(shù)據(jù)承載Bean偏窝,一類稱為業(yè)務(wù)處理Bean收恢。所謂數(shù)據(jù)承載Bean是指實(shí)體類武学,專門承載業(yè)務(wù)數(shù)據(jù)的,如Student伦意、User等火窒。而業(yè)務(wù)處理Bean則是指Service或Dao對(duì)象,專門用于處理用戶提交請(qǐng)求的驮肉。
Controller:控制器熏矿,用于將用戶請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的Model進(jìn)行處理,并處理Model的計(jì)算結(jié)果向用戶提供相應(yīng)響應(yīng)离钝。
MVC架構(gòu)程序的工作流程是這樣的:
(1)用戶通過(guò)View頁(yè)面向服務(wù)端提出請(qǐng)求票编,可以是表單請(qǐng)求、超鏈接請(qǐng)求卵渴、AJAX請(qǐng)求等慧域。
(2)服務(wù)端Controller控制器接收到請(qǐng)求后對(duì)請(qǐng)求進(jìn)行解析,找到相應(yīng) 的Model對(duì)用戶請(qǐng)求進(jìn)行處理浪读。
(3)Model處理后昔榴,將處理結(jié)果再交給Controller。
(4)Controller在接到處理結(jié)果后碘橘,根據(jù)處理結(jié)果找到要作為向客戶端發(fā)回的響應(yīng)View頁(yè)面互订。頁(yè)面經(jīng)渲染(數(shù)據(jù)填充)后,再發(fā)送給客戶端痘拆。
三仰禽、關(guān)系
1、MVC與三層架構(gòu)的關(guān)系
MVC與三層架構(gòu)很相似纺蛆,但它們并不一樣吐葵。如果以三層架構(gòu)為背景,那么MVC的三個(gè)部分分別對(duì)應(yīng)的是什么犹撒?
三層架構(gòu)中的View層簡(jiǎn)單的說(shuō)就是跟用戶發(fā)生直接關(guān)系的層折联,MVC中的V和C就是這樣的存在,所以MVC中的V和C均屬于三層架構(gòu)的View層识颊。同時(shí),我們知道MVC中的M(Model)包括了數(shù)據(jù)承載Bean和業(yè)務(wù)處理Bean奕坟,其中業(yè)務(wù)處理Bean分為Service或Dao對(duì)象祥款,分別對(duì)應(yīng)業(yè)務(wù)邏輯處理和數(shù)據(jù)庫(kù)操作,相應(yīng)的月杉,它們對(duì)應(yīng)的是三層架構(gòu)中的Service層和Dao層刃跛。故,它們的關(guān)系如下圖所示:
2苛萎、SSM與三層架構(gòu)的關(guān)系
SSM即SpringMVC桨昙、Spring检号、Mybatis三個(gè)框架。它們?cè)谌龑蛹軜?gòu)中所處的位置是不同的蛙酪,即它們?cè)谌龑蛹軜?gòu)中的功能各不相同齐苛,各司其職。
SpringMVC:作為View層的實(shí)現(xiàn)者桂塞,完成用戶的請(qǐng)求接收功能凹蜂。SpringMVC的Controller作為整個(gè)應(yīng)用的控制器,完成用戶請(qǐng)求的轉(zhuǎn)發(fā)及對(duì)用戶的響應(yīng)阁危。
MyBatis:作為 Dao層的實(shí)現(xiàn)者玛痊,完成對(duì)數(shù)據(jù)庫(kù)的增、刪狂打、改擂煞、查功能。
Spring:以整個(gè)應(yīng)用大管家的身份出現(xiàn)趴乡。整個(gè)應(yīng)用中所有的Bean的生命周期行為颈娜,均由Spring來(lái)管理。即整個(gè)應(yīng)用中所有對(duì)象的創(chuàng)建浙宜、初始化官辽、銷毀,及對(duì)象間關(guān)聯(lián)關(guān)系的維護(hù)粟瞬,均由Spring進(jìn)行管理同仆。