MVC的軟體設計觀(1)

■ What is MVC?

MVC,Model-View-Controller Separation 樣式(Pattern)
Problem:
希望能夠從視窗畫面(View)之中去掉領域(Model)的耦合,因而支援領域物件(Domain Object)的可重再利用性(Reuse),而且將對隨領域物件而改變的介面所造成衝擊減至最低,該如何作?
Solution:
將領域(Model)類別定義成無法直接耦合或看見視窗畫面(View)類別,並且應用的資料與功能是在領域物件之內維護,而不是視窗類別。

MVC Pattern 其實就是在 Model-View-Controller 三者之間作一個責任的釐清:

  • View:專注於畫面設計,不牽涉資料與邏輯處理。
  • Model:反應企業領域中真實世界的概念,例如“員工”、”部門”等物件。在 ”員工”物件中,它專注的責任在於取得(Get)及設定(Set)員工相關的資訊,並負責所需處理的企業邏輯(Business Logic),如計算員工紅利等 ; 而“部門”物件,則可以取得及設定部門相關的資訊。
  • Controller:承接 View 與 Model 的中間角色,以維護 View 與 Model 兩者之間的獨立性,並負責控制及協調 Model 內物件的互動邏輯。它的角色就好像是公司的總機小姐,當外部的使用者打電話(View)尋求該公司的幫助時,總機小姐(Controller)會依需求的不同再轉達需求至可以服務的部門工作者(Model)。

而且 View、Controller、Model 有著分層的關係,View 可以看見或者傳送訊息到 Controller或 Model 物件,反之,Controller和 Model 物件將會忽略視窗畫面的存在。
未了解 MVC 樣式,而把這些物件都混在一起,使用者介面程式往往亂成一團。
MVC 解開糾結,增進彈性及再利用性!


違反 MVC 的設計:兩層式(Two-tiers)的結構

典型的 2-tier 架構

從使用者的觀點來看,開發人員以所謂 4GL 工具快速建立使用者介面(如 PowerBuilder),從畫面上得知系統需提供什麼樣的功能給使用者,然後軟體開發人員就據此至共用的資料庫“撈”資料來處理。此時,開發人員將企業規則等應用程式邏輯,要就寫在使用者介面端的 Script Language 上;或者就寫在資料庫的 Stored Procedure 上,如上圖 2-tier 的架構,而造成企業邏輯的分散,不容易維護。

顯然地,將企業邏輯寫在前端介面,明顯地違反了 MVC 設計原則:Model 與 View 物件的分離。而將企業邏輯寫在資料庫,似乎比寫在前端介面好一些,事實上,情況也好不到哪裡去,觀察 MVC 的設計,其主要目的是為了要保護 Model 物件–亦即企業物件(Business Object),因為 View 物件是善變的,為了不讓因 View 物件的變動而牽動到 Model 物件,所以才將 View 所傳送過來的需求(Request) 封裝在 Controller 物件裡。

所以,從 “變” 的角度來看時,亦可以知道將 Model 物件表達在資料庫,並不符合現代 e 化系統的特質:異質、分散–資料庫也是善變的。

因為從變動的週期來觀察,我們懂得來分析物件的細緻度(fine-grained)。例如,一棵樹從 “變” 的週期來看時,就會區分出“樹幹”、“樹枝”、“樹葉”.. 等。
相對,觀察從 View、資料庫、Model 等其生命週期的不同,自然地,我們應該可以分為三個元件:Presentation、Business Logic、DataSource。反映出來的結構也就是所謂三層式或多層式的架構了,如下圖:

典型的三層式架構

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *