一、簡(jiǎn)述
在軟件開(kāi)發(fā)中,MVC與三層架構(gòu)這兩個(gè)專(zhuān)業(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層:用于接收用戶(hù)提交請(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)類(lèi)。服務(wù)標(biāo)準(zhǔn)(接口)是相同的,服務(wù)提供者(實(shí)現(xiàn)類(lèi))可以更換。這就實(shí)現(xiàn)了層間的耦合。
3、MVC
MVC是指:Model模型、View視圖、Controller控件器。
View:視圖,為用戶(hù)提供使用界面,與用戶(hù)直接進(jìn)行交互。
Model:模型,承載數(shù)據(jù),并對(duì)用戶(hù)提交請(qǐng)求進(jìn)行計(jì)算的模塊。其分為兩類(lèi),一類(lèi)稱(chēng)為數(shù)據(jù)承載Bean,一類(lèi)稱(chēng)為業(yè)務(wù)處理Bean。所謂數(shù)據(jù)承載Bean是指實(shí)體類(lèi),專(zhuān)門(mén)承載業(yè)務(wù)數(shù)據(jù)的,如Student、User等。而業(yè)務(wù)處理Bean則是指Service或Dao對(duì)象,專(zhuān)門(mén)用于處理用戶(hù)提交請(qǐng)求的。
Controller:控制器,用于將用戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的Model進(jìn)行處理,并處理Model的計(jì)算結(jié)果向用戶(hù)提供相應(yīng)響應(yīng)。
MVC架構(gòu)程序的工作流程是這樣的:
(1)用戶(hù)通過(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ì)用戶(hù)請(qǐng)求進(jìn)行處理。
(3)Model處理后,將處理結(jié)果再交給Controller。
(4)Controller在接到處理結(jié)果后,根據(jù)處理結(jié)果找到要作為向客戶(hù)端發(fā)回的響應(yīng)View頁(yè)面。頁(yè)面經(jīng)渲染(數(shù)據(jù)填充)后,再發(fā)送給客戶(hù)端。
三、關(guān)系
1、MVC與三層架構(gòu)的關(guān)系
MVC與三層架構(gòu)很相似,但它們并不一樣。如果以三層架構(gòu)為背景,那么MVC的三個(gè)部分分別對(duì)應(yīng)的是什么?
三層架構(gòu)中的View層簡(jiǎn)單的說(shuō)就是跟用戶(hù)發(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)者,完成用戶(hù)的請(qǐng)求接收功能。SpringMVC的Controller作為整個(gè)應(yīng)用的控制器,完成用戶(hù)請(qǐng)求的轉(zhuǎn)發(fā)及對(duì)用戶(hù)的響應(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)建、初始化、銷(xiāo)毀,及對(duì)象間關(guān)聯(lián)關(guān)系的維護(hù),均由Spring進(jìn)行管理。