2011年10月26日 星期三

C# 與 LINQ 的 MVC 實踐


前幾天在看維基百科介紹 Ruby 程式語言的時候,看到Ruby on Rails 一個 MVC 的快速網站開發應用框架(Framework,在程式設計的領域是指一個提供該程式語言開發相關函數庫或是虛擬機器等等的環境),突然又出現一個縮寫名詞讓我忍不住轉而去查詢這個縮寫的意思,根據偉大的維基百科記載,MVC的全文是:Model-View-Controller,是軟體工程上面的一種 軟體設計模式 (軟體架構),接著一看這三個名詞分別代表的意思:

ü   (模型Model) - 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫
   專家進行資料管理和資料庫設計(可以實作具體的功能)
ü   (檢視View) - 介面設計人員進行圖形介面設計。
ü   (控制器Controller)- 負責轉發請求,對請求進行處理。                                 (By Wiki - MVC)

過去對於這種抽象的概念我往往不是很能夠馬上理解,或是需要藉由開發的例子才能夠知道箇中意義,但是看著上述的簡單解釋,突然覺得很熟悉…。
對啦!這不就是類似微軟 .NET Framework 下的 LINQ to SQL 的設計方式嗎?再一次有種『過來人的經驗』的感受(第一次是上一次體會到LINQPEAR DB的相似),馬上往下拉視窗,尋找 ASP.NET MVC 的標籤,果不其然,上面就是如此寫著:ASP.NET MVC中,一般情況下模型通常搭配 LINQ to SQL 型別
對於這三個的解釋我以過去開發系統時採用LINQ to SQL的例子做說明,首先要講一下整個目前的企業開發系統所採用的『三層式架構』:
 (感謝K-STAR公司陳課長的指導)






        目前最常採用的系統設計會採用三層式架構,也就是由使用者介面、企業邏輯、資料庫三者連結而成的,使用者可以透過UI與系統互動,但是UI只負責與使用者互動並傳遞使用者改變的相關參數到下一層的企業邏輯去,由邏輯曾進行邏輯運算,而邏輯運算的廣大資料基礎便是建置在企業內部或是雲端上的資料庫、是資料倉儲、資料中心。
        UI和資料庫很容易區別,但是對於傳統寫網頁的人員而言,可能會和我一開始碰到『邏輯層』時一樣,不明白區別在哪裡,這個概念,其實就是MVC的實踐,可以用一個概念來思考:『UI就是版面設計,Logic就是程式設計』。
        很多時候,人們會把做『網頁設計』的想成一定就是『版面+程式』都要會,其實不然(雖然很多網頁設計人才是兩樣兼備),版面和程式是可以分開的,版面是程式的與外界的『互動表現(Representation)』,而程式才是整個網頁互動的基礎,所有互動的參數傳遞、資料運算、回饋、資料呈現、資料抓取等等都是由程式負責,而這個工作其實很大部分是沒有表現出來的,舉例來說,版面就是打開瀏覽器,看到畫面上GoogleLogo和下面的輸入框及搜尋按鈕,而當你按下搜尋,網頁會送出你輸入的值,傳送給一個檔案,由那個檔案負責做Search的運作,沒錯!那個檔案就是程式。
        有時候因為網站的互動功能較少,或是為了做功能上的區隔,會將UILogic寫在同一個檔案(很多PHP網頁即是如此),所以才會有『網頁(程式)設計就是整個網頁(也就是UI)』的錯覺,MVC就是把程式與美工做一個區隔,讓『版面人員專心做版面,程式設計師專心寫程式』。
        以 LINQ to SQL 來看,*.aspx (*.asp) 就是網頁的外觀設計(View),而*.cs就是檢視器(Controller),而繼承LINQ to SQL(*.dbml)*.cs檔案就是模型(Model),模型中定義各個可能的功能操作,甚至我覺得連*.aspx*.cs也可以看做是一個模型,因為你也可以在其中定義一些操作。

*補充維基百科上面講到RoRMVC模式:
Ruby on Rails 是透過 Ruby 語言所開發出來的 Web Framework,也是採用 Model-View-Controller 架構。Model 部份使用 Active Record 概念實做,加上 Migration 機制,使得其 Model 結構非常容易控制。

3 則留言:

  1. 如果你玩php的話 codeigniter這個framework也是MVC

    回覆刪除
  2. 帥喔!!! 果然是資工系的真的有學到東西!
    感謝你成為我第一個回應者XD

    回覆刪除
  3. 這是我自己上網找到的,專題也用這個開發阿!

    回覆刪除