在錯誤中學習ASP.NET MVC 第 1 篇 - MVC介紹
何謂錯誤中學習?
我指的是在專案時程很緊湊的時候,通常也就是花大量時間Debug的時候了,因為沒時間去打好程式語言的基礎,程式自然是寫一行算一行,只求能動,其他的大多是不明究理,哪有空管那麼多啊...
但在錯誤中學習Debug所花的時間其實往往更多,網路上一篇文章就曾提到「對菜鳥開發者的叮嚀:花一萬個小時練習 Coding,不要浪費一萬小時無謂地 Debugging。」完全是在講我(自己對號入座),不如好好看懂觀念(專案很趕的時候從來不會有這種想法),若學習任何一種程式語言都能夠穩紮穩打,相對就能減少很多不應該犯的錯誤或是遇到錯誤時能夠知道要怎麼改,雖然說即使亂寫也能動,但對於系統架構以及後續維護是否會衍生更多問題...管他的又不是我維護(?)
在接下來的30天中,除了會介紹在ASP.NET MVC的一些基本概念之外,也會分享在錯誤觀念下使用ASP.NET MVC開發專案曾遇過那些問題,並以觀察內建的範本來觀察與學習程式碼。在此聲明,如內容有服用不適的情況,請自行就醫XD。
MVC介紹
圖片來源:http://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx
以前在寫android或php時沒有使用過MVC架構,所以聽到MVC(Model-View-Controller)時是還蠻陌生的,以下是我剛認識MVC的淺見
Model(資料模型):
以前在php裡面就是每次需要撈資料就開啟連線、執行SQL再關閉連線,有關CURD的程式碼是散落在每一支程式碼裡面,但透過Model就能夠統一定義資料結構、存取操作。
View(畫面呈現):
就像php裡面的Smarty樣板,php負責把處理好的資料餵給Smarty樣板吃然後去做網頁的資料呈現
Controller(流程控制):
處理流程還有把View跟Model連結起來,例如資料新增成功(Model)之後要呈現什麼畫面(View)
是說會寫ASP.NET MVC之後再也不想寫php了XD
MVC優點
以習慣代替配置
在多人開發的專案中常常因為大家對於專案架構的不了解而造成程式碼混亂,檔案放在不該放的資料夾內是常有的事情,但在MVC當中已經明確規範了很多規則,例如Controller的檔名必須是Controller結尾,View一定要放在專案中的Views資料夾底下,所以在開發MVC之前不需要再特別的去跟同事互相討論專案的一些細節規範也能夠輕鬆的擁有一個MVC架構的專案,並且在接手其他MVC案子的時候可以比較容易找到程式存放的位置,不過在這之前也是需要先行了解MVC的定義好的開發習慣或是團隊間在自行加強所需要的規則,不然也是免不了會有亂放的情況。
關注點分離
簡單來說就是一次只關注在一件事情上,舉裡來說我們的開發團隊中就很明確的細分出誰負責Model的開發、誰負責View、誰負責Controller,各自將功能封裝起來之後就可以只專注在自己負責的事情上面,因為大家擅長的部份也都不一樣,像我資料庫那塊就弱到爆,雖然不適合寫Model但只要能使用別人寫好的方法我就能夠去處理其他我能做的事情,所以一次只關注在一件事情上就很適合我這種不是全能型的選手,或是能把問題細分出來再慢慢各自處理會會比同時一次性的處理掉所有事情來得簡單一點。另外遇到錯誤時怎麼辦?過去在php裡面那種義大利麵的寫法在遇到bug時不易找出錯誤的地方,但透過關注點分離很容易可以找到該負責或下台的是哪一位工程師,之前我跟主管就常常發生很白癡的事情,斬釘截鐵跟他說Model吐出來的資料不是我要的,他說不可能他檢查過了,後來一起debug天才發現... 我的JSON名稱多打一個空白...所以如果是那種少打一個字或是空白問題,有時候還是要自己眼睛睜大一點,這個例子可能不是很好XD,但透過關注點分離真的可以很容易地發現問題點是落在哪裡。
分層架構
除了預設的MVC的架構外也能自己在切割出更多功能層,讓專案維護性提高,例如可以把一些商業邏輯在個別抽出來,簡化程式碼或提高重複利用性,例如把Model定義好之後,那麼在同一個方案中前台與後台的專案就可以共用同一個Model(設成類別庫)。
開放原始碼
拜開放原始法所賜,MVC真的發展的很快,去年才在學MVC4,現在MVC6已經在蠢蠢欲動了,網路上也有很多神等級的人開發很多免費的套件讓大家使用,其實寫的code真的越來越少了XD,另外附上原始碼的網站:[http://aspnetwebstack.codeplex.com/SourceControl/latest](http://http://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx 以前在寫android或php時沒有使用過MVC架構,所以聽到MVC(Model-View-Controller)時是還蠻陌生的,以下是我剛認識MVC的淺見 View(畫面呈現)的觀念倒是比較好理解,就像php裡面的Smarty樣板,php負責把處理好的資料餵給Smarty樣板吃然後去做網頁的資料呈現 Controller(流程控制)的感覺是在處理流程還有把View跟Model連結起來,例如資料新增成功(Model)之後要呈現什麼畫面(View) Model(資料)是我理解最久的地方,以前在php裡面就是每次需要撈資料就開啟連線、執行SQL再關閉連線,有關CURD的程式碼是散落在每一支程式碼裡面,但透過Model就能夠統一定義資料結構、存取操作。 是說會寫ASP.NET MVC之後再寫不想寫php了XD MVC優點 以習慣代替配置 在多人開發的專案中常常因為大家對於專案架構的不了解成產生程式碼混亂,檔案放在不該放的資料夾內是常有的事情,但在MVC當中已經明確規範了很多規則,例如Controller的檔名必須是Controller結尾,View一定要放在專案中的Views資料夾底下,所以在開發MVC之前不需要再特別的去跟同事互相討論專案的一些細節規範也能夠輕鬆的擁有一個MVC架構的專案,並且在接手其他MVC案子的時候可以比較容易找到程式存放的位置,不過在這之前也是需要先行了解MVC的定義好的開發習慣,不然也是會很茫茫然的。 關注點分離 簡單來說就是一次只關注在一件事情上,舉裡來說我們的開發團隊中就很明確的細分出誰負責Model的開發、誰負責View、誰負責Controller,各自將功能封裝起來之後就可以只專注在自己負責的事情上面,因為大家擅長的部份也都不一樣,像我資料庫那塊就弱到爆,雖然不適合寫Model但只要能使用別人寫好的方法我就能夠去處理其他我能做的事情,所以一次只關注在一件事情上就很適合我這種不是全能型的選手,或是能把問題細分出來再慢慢各自處理會會比同時一次性的處理掉所有事情來得簡單一點。另外遇到錯誤時怎麼辦?過去在php裡面s那種義大利麵的寫法在遇到bug時不易找出錯誤的地方,但透過關注點分離很容易可以找到該負責或下台的是哪一位工程師,之前我跟主管就常常發生很白癡的事情,斬釘截鐵跟他說他的Model吐出來的資料不是我要的,他說不可能他檢查過了,後來檢查半天才發現... 我的JSON名稱多打一個空白...所以如果是那種少打一個字或是空白問題,有時候還是自己眼睛睜大一點吧,但我想分享的是透過關注點分離可以很容易地發現問題點是落在哪裡。 分層架構 除了預設的MVC的架構外也能自己在切割出更多功能層,讓專案維護性提高,例如可以把一些商業邏輯在個別抽出來,簡化程式碼或提高重複利用性,例如把Model定義好之後,那麼在同一個方案中前台與後台的專案就可以共用同一個Model(設成類別庫)。 開放原始碼 拜開放原始法所賜,MVC真的發展的很快,去年才在學MVC4,現在MVC6已經在蠢蠢欲動了,網路上也有很多神等級的人開發很多免費的套件讓大家使用,其實寫的code真的越來越少了XD,另外附上原始碼的網站:http://aspnetwebstack.codeplex.com/SourceControl/latest)
留言
張貼留言