1. 程式人生 > >MVC框架中的模型-檢視分離問題(一) —— “你必將業務邏輯由顯示中分離”

MVC框架中的模型-檢視分離問題(一) —— “你必將業務邏輯由顯示中分離”

    說到MVC[1](Model-View-Controller,模型-檢視-控制器),應該說是這些年進行web動態網頁開發最“給力”的框架了。而基於MVC的web應用框架[2](web application framework)也多如繁星。具體到開發某個web專案,就涉及到選擇什麼樣的應用框架實現最適合。網上有大量關於如何選擇MVC框架的優秀文章,這兒就不多加討論了。
    本文關注的是MVC中一個小而關鍵的問題,那就是模型-檢視的分離(Model-View Separation)。之所以討論這個問題,固然有它的現實意義,比如可以指導對具體應用框架實現的選擇,本文也會在後面結合實際情況進行論述;而更重要地,希望能夠從理論的角度對這個問題進行一般性的總結,抽象出一些普適性的原理和規則,無論MVC框架實現如何變化萬千,其對框架的設計和運用都可以產生一定的指導意義。
    具體說來,這樣的討論涉及如下問題:

  • 什麼是模型-檢視分離?
  • 為什麼要進行模型-檢視的分離?這種分離會給web開發人員帶來什麼好處,需要他們付出多少精力?
  • 指導模型-檢視分離的規則和方法是什麼?
  • 對於某個具體的框架實現,評估其模型-檢視分離的程度,以及對開發人員的影響。

    當然,每個理論層面的討論都需要有一定的基礎理論支撐。對“模型-檢視分離”的探討建立在如下原則上:你必將業務邏輯由顯示中分離。(thou shalt separate business logic from display.)
    本文的主要論點及理論描述來源於文獻《Enforcing Strict Model-View Separation in Template Engines》[3]

;有興趣的朋友可以直接查閱。而寫此文的目的是由於近來參與了若干不同的專案,而採用的MVC框架實現也各不相同;觀察到不同的框架在“檢視”部分的實現有很大差異,而且一旦需要更換框架,實現“檢視”動態部分的程式碼幾乎需要全部重寫。
遂萌發弄清楚“模型-檢視分離”問題的想法。
    做為“模型-檢視分離”問題發生的所在,下面首先介紹一下模板引擎[4](template engine)及其歷史演變。