2015年8月22日 星期六

傳統 MVC 模式與 Django MTV 模式介紹與比較

 



MVC模式簡介


如何設計一個程式的結構,這是一門專門的學問,叫做架構模式(architectural pattern),屬於程式設計的方法論。

MVC模式就是架構模式的一種,MVC模式的目的是實作一種動態的程式設計,使後續對程式的修改和擴充功能簡化,並且使程式某一部分的重複利用成為可能。除此之外,此模式通過對複雜度的簡化,使程式結構更加直覺。




軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:
  • 控制器 Controller - 負責轉發請求,對請求進行處理。
  • 視圖 View - 介面設計人員進行圖形介面設計。
  • 模型 Model - 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能)。







Django的MTV模式


Python 有許多的 MVC 架構,例如 Django 和 TurboGears。目前 Django 在 Python 的 Web 開發圈裡被大幅運用。主要目標是使得開發複雜、資料庫驅動的網站變得簡單。它注重組件的重用性和「可插拔性」,敏捷開發和 DRY 法則(Don't Repeat Yourself)。

雖然 Django 架構是屬於接近 MVC 的架構,但名稱上略有不同。

一般MVC架構
Django 架構
Model
Model(Data Access Logic)
View
Template(Presentation Logic)
View
View(Business Logic)
Controller
Django itself



MTV 與 MVC 的比較


Django的MTV架構 (Model-Template-View) 經常被拿來與 Ruby On Rails 和 Pylons Project 作比較。在Django開發團隊所理解的MVC架構中,一般MVC架構的View是用來呈現獲取的資料給使用者,View的目的不是"資料如何呈現",而是"呈現哪一個資料"

View所描述的是你看到什麼,而不是你看到的是什麼樣子,這兩者是很微妙的差異。在這樣的理解之下,在Django的框架的View是特定網址(URL)的回呼函式(callback function),回呼函式會決定哪一個資料被獲取,所以View描述的是"你看到什麼"。

更進一步來說,將內容(content)從展現的視圖中分離開來是明智的選擇,因此Django採用樣板(template)的方法。Django的View決定呈現哪一個資料,而View所指定的Template則會描述"你如何看到、長什麼樣子"。換句話說,Django的View和Template都是對應到MVC架構的View,都是關於資料顯示的部分。

如果你硬是要從Django的框架中找到MVC樣式對應的Controller,那麼大概就是Django自己本身吧!因為Django收到請求之後,Django將決定適當的View(依據URL設定檔:urls.py)。

最後,不管這些架構是怎麼命名,Django將會為我們實現最合理的框架,重要的是我們必須了解這些設計樣式的觀念。









References


Beginning Django Web Framework - Django框架
https://sites.google.com/site/djangowebapp/django-framework

Wiki - MVC
https://zh.wikipedia.org/wiki/MVC

Essence and Artifact - Essence of MVC
http://www.essenceandartifact.com/2012/12/the-essence-of-mvc.html






技術提供:Blogger.