抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

    在 Djnago 專案採用 MVT (Model-View-Template) 架構模式進行開發與維護,而 MVT 架構屬於 MVC (Model-View-Controller) Pattern 的變形。目的是為了降低專案複雜度,將程式碼依照功能獨立,提升開發效率,透過 MVC 設計模式 (Design Pattern) 實現鬆耦合相依性 (loosely coupled dependencies)。接下來我們來說明 MVC 與 Djagno 的 MVT 架構間的特色。

鬆耦合相依性(loosely coupled dependencies): 指系統中不同的功能模組之間依賴性較弱,彼此的變化造成的影響較小,不會因為部分元件改動導致系統整體喪失服務能力。

1. MVC (Model-View-Controller) Design Pattern

    MVC 一詞是由三個功能分類的英文開頭的簡稱,分別是: 模型 (Model), 視圖 (View) 與控制器 (Controller),最初是由 Trygve Reenskaug 擔任訪問學者時在 Xerox PARC 時發表於技術報告上,目的是當初為了讓使用者從複雜功能的大型系統上尋找適合的可行方案所定義,而後來的成為 Smalltalk-80 程式語言的基礎。

Xerox 全錄最為知名的是他在印表機的產品。
Smalltalk-80 是軟體工程理論中最具代表性的經典程式語言例如:設計模式、敏捷開發、程式碼重構以及物件導向,也進一步推動 Python、Ruby、Objective-C 程式語言設計思維。

MVC 是由以下三個核心組成:

  • Model (模型): 負責存取和管理資料,提供與資料相關的業務邏輯。
  • View (視圖): 負責呈現來自 Model 資料的功能模組。
  • Controller (控制器): 負責接收使用者輸入、處理事件與 Model 溝通、決定使用哪一個 View 進行呈現。

各個模組對應的關係圖,如圖 1. 所示。圖 2. 為 Codeigniter 這個框架的 MVC 架構作為解說案例所繪製的概念圖,

2. Django 的 Model-View-Template Design Pattern

而 Django 中的框架則是按照框架本身的目的 (即網頁後端開發) 進一步整合 MVC 概念發展出 MVT (Model-View-Template) 框架,不過相比 MVC 架構下有些許差異。首先是根據 Django 框架的目的 (後端網頁開發),特邊將 MVC 中 View 獨立出來並且拆分成 View 與 Template,View 專職處理呈現資料的邏輯,Template 則為畫面真正呈現的部分。而 MVC 中的 Controller 中將一部分邏輯分配給 View,Django URL Dispatcher (urls.py) 也扮演一部分的 Controller 的角色,負責將 URL 請求指向至對應的 View function。從 Django 框架來看,實際上 Django 本身就是一個 Controller,因為 Django 框架從接收到使用者請求到抓取資料庫資料及畫面呈現,都已經定義好完整的流程,如同 MVC Controller 控制系統的流程與使用者輸入那樣,綜合上述圖 3. 為 Django MVT 架構圖並以 MVC 的視角進行解釋。

在官方文件的常見文題中 Django FAQ 提到,實際上 MVT 框架是由 MVC 框架所啟發,但不完全遵循 MVC 設計,追根究底這些框架設計的目都是為了提升開發效率。

Django 的 MVT 由這三個核心組成:

  • Model (models.py): 使用物件關聯映射 (Object-Relational Mapping; ORM) 的資料表示方式,紀錄資料屬性與邏輯。
  • View (views.py):控制畫面輸出使用的模板邏輯與查詢畫面會使用的資料新增、刪除、查詢邏輯控制。
  • Template:畫面呈現的程式碼,通常是由 HTML、CSS、JavaScript 語法構建。

留言