Ruby on Rails 如何實現 MVC?
Note
MVC是什麼?
聊到Ruby on Rails如何實現MVC,就要先來了解MVC是什麼?
MVC是一種軟體架構模式,把軟體分為三個部分:模型(Model)、視圖(View)和控制器(Controller)。每個部分有各自的職責,能讓程式的架構能更加直覺,也因此更容易進行分工。
- 模型Model:用於封裝與應用程式的商業邏輯(Business logic)相關的資料以及對資料的處理方法,處理資料庫的操作。
- 視圖View:負責將資料傳遞給使用者,並處理畫面的呈現。
- 控制器Controller:負責接收從外部 (使用者介面) 傳來的訊息並作出回應,指派工作,是 Model 和 View 的中間人,起到不同層面間的組織作用。
Ruby on Rails如何實現MVC?
- Model (Active Record)
Active Record是Rails中提供ORM(Object-Relational Mapping:將應用程式中複雜的物件,對應到關聯式資料庫管理系統中的資料表)的元件,負責新增與操作需要持久存在資料庫裡的資料。
- View (Action View)
Action View 與 Action Controller 是 Action Pack 中的兩個主要元件。 在 Rails 裡,網路請求是由 Action Pack 負責處理的。通常 Action Controller 是與資料庫溝通,根據需求來執行 CRUD 操作。而 Action View 則接著負責編譯出回應。
Action View 模版(templates)是由嵌入 HTML 的 Ruby 撰寫而成(Embedded Ruby, erb),為了避免模版充斥混亂的程式碼,Action View 提供了許多輔助方法(helper),用來撰寫表單、日期及字串等。每個 Controller 在 app/views
中都會有一個對應的資料夾,裡面包含了該 Controller 的模板檔案(template files)。這些檔案用來顯示 Controller 各個動作的結果頁面。
回傳給用戶端的完整 HTML 是由這個 ERB 檔案(Templates)、版型(Layouts),以及其它引用的局部頁面(Partials)組成。
- Controller (Action Controller)
一個請求進來,路由(router)決定是哪個 Controller 的工作後,便把工作指派給該Controller,Controller 負責處理該請求,給出適當的回應。幸運的是,Action Controller 把大部分的苦差事都辦好了,只需遵循一些簡單的規範來寫程式。
對多數按照 REST 規範來編寫的應用程式來說,Controller 的工作便是接收請求(開發者看不到),去 Model 讀或寫資料,再使用 View 來產生出 HTML,Controller 因此可以想成是 Model 與 View 的中間人,負責替 Model 將資料傳給 View,讓 View 可以顯示資料給使用者。Controller 也將使用者更新或儲存的資料,存回 Model。
關於Rails MVC的流程圖解與實際應用以及目錄結構,可以參考高見龍老師的Model、View、Controller 三分天下