MVC 模式已死?何不試試 MOVE


MVC 模式在編程中的應用,是一個很了不起的主意。“數據模型(Model)” 可以封裝與應用程序的業務邏輯相關的數據及對數據的處理方法;“視圖層(View)” 能夠實現數據有目的的顯示;“控制器(Controller)” 能夠在不同層面間起到組織作用,對應用程序的流程進行控制。

不過,可能你在使用這種三層架構模式的過程中會逐漸迷惑。因爲有很多代碼你不知道把它放哪,就只好把它放到控制層,最後發現在控制層中塞了太多的代碼。

LinkedIn 的軟件工程師
Conrad Irwin也遇到同樣的問題,於是他開始使用另一種模式:MOVE,即 Models(模型)、Operations(操作)、Views(視圖)、Events(事件)。近日Conrad Irwin 在
個人博客上分享了關於這種模式的一些觀點。

概述


Irwin 結合上圖對 MOVE 模式先作了簡單定義:

Models
,封裝該應用程序中知道的一切;

Operations
,封裝該應用程序要做的一切;

Views
,幫助用戶與應用程序完成交互;

Events
,用於安全地連接所有這些組件。

爲了避免意大利麪條式的代碼,圖中標示出了對哪種類型的對象進行操作是允許的。例如,視圖允許監聽由模型產生的事件;操作允許修改模型,但模型不應涉及視圖或操作。

Models(模型)
這裏以一個 “User” 對象爲原型,它至少應用有一個 Email 地址,也可能有用戶名和電話號碼。

在一個 MOVE 模式的 Models 中只包裝知識。這意味着除了 Get 和 Set 功能,它們可以包含檢查用戶密碼是否正確這樣的方法,但不會包含把密碼保存到數據庫或傳遞給外部 API 這樣的功能,因爲後面這些工作將由 Operations 來完成。

Operations(操作)
對應用程序來說,一個常見的操作是用戶登陸。這實際上是由兩個子操作組成:首先從用戶那裏獲得郵件地址和密碼,然後從數據庫載入 “user” 模型並檢查密碼是否匹配。

Operations 是 MOVE 模式中的行動者。它負責修改模型,在正確的時間顯示正確的視圖,以及響應由用戶交互引發的事件。在一個分解良好的應用程序中,每個子操作都可以獨立運行。

採用這種方式的操作有一點很令人振奮,即程序啓動後,整個應用本身就可以被當作一個 Operations。它會根據需要生成儘可能多的子操作,其中每個子操作都並行地運行。當所有子操作都完成時,程序也便退出。

Views(視圖)
登陸頁面即是一個視圖,它負責顯示一些文本框給用戶。當用戶點擊 “登陸” 按鈕時,視圖將產生一個 “loginAttempt” 事件,其中包含用戶輸入的用戶名和密碼。

用戶能夠看到的內容,以及能感受到的互動都由視圖提供支持。它們會以一種用戶能理解的形式呈現應用反饋,同時還能將簡單的用戶交互轉換成有意義的事件。更重要的是視圖不會直接改變模型,它們只是向 Operations 發起事件,然後通過監聽等待由模型發起的事件。

Events(事件)
當用戶登陸時,視圖會發起 “loginAttempt” 事件。在登陸操作完成後,“currentUser” 模型會發起一個事件通知應用登陸狀態已改變。

事件監聽讓 MOVE(及 MVC)實現控制反轉,允許模型更新視圖。這是一種強大的抽象技巧,允許組件互不干擾地耦合在一起。

爲什麼是現在?
當然,Conrad Irwin 並不想被人認爲自己是在暗示 MVC 模式很差,這種大型應用程序架構在過去的幾十年裏確實非常成功。不過幾十年後的今天,新的編程技術已經變得越來越流行,所以你也會在使用過程中逐漸產生一些疑惑。

MVC 模式確實很了不起,但它畢竟是幾十年前爲老的技術而設計。MOVE 模式是在其基礎上的升級,讓你可以更好地利用當前已有的新工具。

原創文章,作者:花殼

發佈了18 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章