其實 MVC 不過就是一種軟體設計模式(Desigh-Patter),最早的 MVC 設計模式在1974年提出,而 MVC 這種設計模式目的就是為了實作一種動態的程式設計,使後續程式的修改和擴充功能簡化,並使程式碼都能重複利用。而在 MVC 設計模式裡,我們最常聽見的也莫過於「關注點分離」的概念,希望讓系統的每個地方都只做自己的事情,也因此MVC這種設計模式能大量改善早期的義大利麵式的程式碼。
前言
永遠沒忘記人生中第一隻Web應用程式竟然就是從ASP.NET MVC開始,那天學長拿著本書要我把裡面範例做一做,從此就陷入了MVC的華麗旅程裡。以前最多就只聽過 ASP.NET WebForm、PHP 或是很簡單的HTML(小弟承認我當時才學不足....),對於一個原先只碰過 VB.NET 的人來說,寫WEB一開始在我眼中好像很簡單似的,但實際上我發現我錯了還錯的很離譜XD。
初談ASP.NET
在開始介紹ASP.NET之前不知道大家有沒有聽過「義大利麵程式」,義大利麵程式莫過於在一個網頁檔裡面,他包含了許多東西,小弟印象中第一次接觸PHP的時候就有所感覺,每每一個 .php 檔案裡面,包含了HTML Tag、php語法、Javascript片段以及CSS語法,當然你會說Javascript和CSS可以用外掛的方式近來,但光邏輯程式碼就可以一大篇,更不用說加上html tag後,一個 .php 檔案裡面的程式碼複雜度也大大的提升了。(註:目前php也有MVC的框架來改善此問題)
反觀回ASP.NET,微軟將整個Web需要用到的技術包裝起來,讓開發網頁跟開發Windows Form那樣,有了更多的邏輯運算和函式庫供開發人員操作,在ASP.NET裡面進步最大的大概也是Code Behind的概念,將傳統的html和後端邏輯運算的程式碼拆開來,讓開發人員在撰寫上能類似我們在寫 Win Form那樣有了"事件"的概念,但近年來隨著網頁技術越來越進步,每個網站既要快又要功能扎實,甚至許多技術也悄悄的萌芽像AJAX、SingleR等,這也讓ASP.NET的缺點逐漸浮出檯面,如下:
1.傳輸過於笨重
2.複雜的HTML
就如同前面所言,ASP.NET裡面讓每個物件都有了事件的概念,ASP.NET裡用了View State來處理整個生命週期,每當你做了一個請求,就會將網頁上每個物件的事件記錄在View State裡然後丟在頁面端,對於新手來說若沒處理好,是很容易因為View State過於龐大,而造成在傳輸上增加了許多負擔。而透過ASP.NET產生出來的HTML,擁有複雜的id,也讓我們在操作上的難度更上一層樓。
當然微軟也是有很多的,就在眾多的抱怨聲響中,ASP.NET MVC也悄悄問世了,目的當然就是為了來改善 ASP.NET不足的地方,從 1.0 版本到現在的 4.0 版本也不過短短的3、4年時間,ASP.NET MVC 也多了更多的思維,有了所謂的「關注點分離」,也增加了其「測試性」,雖然許多人還是會說 ASP.NET MVC 不好用,因為他沒有像 ASP.NET
那樣拖拉來的方便,覺得每個環節似乎都需要自己來處理,但其實有句話是這麼說的「活到老,學到老。」,科技一直在進步當然技術也是,唯有讓自己不斷的進步,改變舊有的思維來接受新的概念,才能讓自己有更多的收穫。
認識ASP.NET MVC
所以所以到底什麼是 ASP.NET MVC,其實 MVC 不過就是一種軟體設計模式(Desigh-Patter),最早的 MVC 設計模式在1974年提出,而 MVC 這種設計模式目的就是為了實作一種動態的程式設計,使後續程式的修改和擴充功能簡化,並使程式碼都能重複利用。而在 MVC 設計模式裡,我們最常聽見的也莫過於「關注點分離」的概念,希望讓系統的每個地方都只做自己的事情,也因此MVC這種設計模式能大量改善早期的義大利麵式的程式碼。
而MVC也不過是三個英文字母的縮寫,分別是:
- Model - 模型,包含資料驗證、存取處理以及商業邏輯
- View - 視圖,包含HTML、顯示邏輯
- Controller - 控制器,控制整個程式運作流程
若再講的更細一點,Model 的功用就是處理那些複雜的商業邏輯運算,資料驗證,存取。
而 Controller 就是控制整個程式的流程,當今天使用者對網頁發送了一個請求,而這個請求該到哪邊去處理,需要跟Model 取得哪些資料,最後這個請求的結束點會落在哪,是到A畫面或B畫面,所以Controller 控管了在每次的請求的路該怎麼走。
最後 View 也莫過於最複雜的了,如:CSS、HTML、Javascript、Ajax....等,不過 View 就只是為了整個畫面的呈現,在 View 上我們不應該有過多的邏輯運算。
說到這邊,大家還記得前面所提及「關注點分離」的概念,如果以一個三人小組來看,在這小組裡面可能有一位DBA、PR、和前端設計師,而剛好這三個角色就可以分別放入 M、V、C 這三個角色之中,這也是 MVC 這種設計模式最迷人的地方,讓每個角色都可以各司其職,彼此建立在有點黏,但又不致於太黏的關係上。
這邊也附上一張 MVC 三者之間的關係圖,以 Controller 來說因為他決定了該跟 Model 取得哪些資料,並且最後需返回至哪個 View 上,所以他相依於 Model 和 View,而 View 則相依於 Model,因為他需決定透過 Controller 所送過的 Model 資料該如何顯示於頁面上,最後 Model 可以說是最獨立不過的了,就算今天沒有了 Controller 和 View 他還是可以存活的很好,不難想像的是假設今天有 A 和 B 兩個系統,這兩個系統也許都共用了同一個 Model ,所以當 Model 設計好之後,就能直接般一致另外一個系統上,而不會有太多的問題。
ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that enables a clean separation of concerns and that gives you full control over markup for enjoyable, agile development. ASP.NET MVC includes many features that enable fast, TDD-friendly development for creating sophisticated applications that use the latest web standards. -- 截至ASP.NET MVC 官網
透過這段話也告訴了我們,在 ASP.NET MVC 中提供了我們一個強大,且遵循 MVC 設計模式所建構出來的一個動態網站,使我們的系統達到關注點分離的概念,以及讓你能完全操作控制項,並且提供我們更敏捷的開發方式。
總結
這也僅僅是個開始,雖然我接觸 Web 到現今也差不多一年的時間,對於許多前輩來說還是只能遠遠望著大家,但還是希望將小弟從開始學 ASP.NET MVC 以及在工作上的一些過程跟大家分享。最後我想說很慶幸我一開始接觸的 Web 應用程式是從 ASP.NET MVC 開始,因為我根本愛上了他,也因為其獨立性,讓我針對網頁前端的技術能有更快的突破,至少我原本是個 PR 卻得去寫前段的 CSS 排版和 JQUERY 應用,還得設計資料庫....,如果你的公司不像微軟或 Google 那樣才才輩出,你還是得辛苦的去學這些東西,所以到底是好是壞,就留在大家新中思考看看囉 ~~
後續串針對 ASP.NET MVC 更詳盡的內容也將在接下來的文章中一一介紹。
新手發文,如有錯誤煩請告知,感謝。
如果喜歡我的文章請按推薦,有任何問題歡迎下面留言~~~
簽名:
學習這條路很廣,喜歡什麼技術不重要,重要的是你肯花時間去學習