就個(gè)人感覺(jué)而言。ASP.NET MVC是一種非常反人類的設(shè)計(jì)。(我沒(méi)有接觸過(guò)Java的MVC,不知道兩者是否一樣。如果一樣,那么搞Java的同學(xué)也挺可憐。)尤其是MVC的路由機(jī)制,灰?;页7磩?dòng)。路由所帶來(lái)的“美觀的”URL,通過(guò)合理的文件層次布局+URL重寫機(jī)制同樣可以解決。但顯然文件目錄結(jié)構(gòu)的方式,更直觀明了,貼近人們的自然思路??上Р还芪覀?nèi)绾瓮虏郏_蒂亞?納德拉估計(jì)是不會(huì)聽(tīng)的。
MVC的默認(rèn)組織機(jī)構(gòu)是扁平的。所有的Controller都是平級(jí)的。在大型項(xiàng)目中,這完全是一個(gè)災(zāi)難。當(dāng)需要上百個(gè)甚至數(shù)百個(gè)Controller,或是為了讓代碼“自說(shuō)明”時(shí)(指合理的給方法、文件命名,使閱讀者在沒(méi)有注釋的時(shí)候也能直接讀懂開(kāi)發(fā)者的意圖),很多Controller需要同名時(shí),尤其讓人崩潰。路是死的,人是活的。為了解決這一問(wèn)題,聰明的程序猿想出了很多辦法。比如利用Area機(jī)制、重寫視圖匹配機(jī)制、重寫MVC框架等等。我們的OA系統(tǒng)中也有近百個(gè)Controller,不提前規(guī)劃好路由,后續(xù)的工作我們就無(wú)法展開(kāi)。所以,在這一節(jié),我們就來(lái)聊聊其中兩種不對(duì)MVC做大手術(shù)的方式。
(僅僅一個(gè)小功能模塊就需要10多個(gè)Controller,在大型項(xiàng)目中,甚至需要數(shù)百個(gè)Controller,對(duì)項(xiàng)目管理而言,如不進(jìn)行合理劃分、管理,而按照mvc默認(rèn)的平級(jí)存放,無(wú)疑會(huì)帶來(lái)災(zāi)難性的后果。注:本圖已對(duì)功能模塊進(jìn)行按目錄劃分)
MVC大型項(xiàng)目常見(jiàn)組織方式1——重寫視圖匹配機(jī)制,實(shí)現(xiàn)MVC多級(jí)目錄
該方式的核心要點(diǎn)是:根據(jù)功能劃分,對(duì)Controller和View進(jìn)行多級(jí)目錄處理(如上圖)。然后通過(guò)路由優(yōu)先級(jí)和重載MVC自帶的視圖匹配邏輯的方式,達(dá)到精確控制URL與Controller、Views進(jìn)行匹配。進(jìn)行這是最接近自然思維的處理方式,合理而精細(xì)的安排路由優(yōu)先級(jí)的情況下,可以做到非常深的目錄層次。在我們的示例項(xiàng)目中,也將采用這種辦法。
- 根據(jù)功能劃分,對(duì)Controller和View進(jìn)行多級(jí)目錄劃分。
- 注冊(cè)路由列表,通過(guò)優(yōu)先級(jí)的方式,將路由和Controller一一對(duì)應(yīng)。
- 重載MVC視圖匹配邏輯,將View和Controller一一對(duì)應(yīng)。