MVC之父對“模型-視圖-控制器”的最初定義
我創立的Model-View-Controller(MVC)模式作為一個直觀的解決方案,針對的是一個一般性的問題,即讓用戶能夠支配自己從多個角度看到的信息。MVC引起了的關注之多,讓人有點始料不及。有些教材對MVC的改造甚至到了離經叛道的程度,企圖達到讓計算機來控制用戶的悖謬目的。
而MVC的根本目的是在人類頭腦中的心智模型和計算機中的數字模型之間架起一座橋梁。理想情況下,MVC的實現方案與用戶直接查看和操作領域信息的直覺吻合。假如用戶想在不同的上下文中以及/或者以不同的視角看到相同的模型要素,那MVC就有了它的用武之地。
模型
模型,表示知識。它既可能是一個對象(當然,如果僅一個對象就沒多大意思了),也可能是由許多對象組成的結構。
模型及其組成部分是一方,而模型創建者意識中要表現的世界則是另一方,這兩方應該一一對應。自然地,模型的每個節點都應該明確對應于問題的一個部分。
模型的所有節點都應該把問題解決到相同的程度,把面向問題的節點(例如,在日程中添加約會活動)與實現細節(例如,用段落展示)混在一起不容易理解,是應該避免的做法。
視圖
視圖是模型的(可見的)表現。視圖通常會突出模型的某些屬性,同時隱藏其他屬性。從這個意義上講,視圖就像是一個展示過濾器。
視圖依賴于模型(或模型的一部分),通過詢問問題的方式從模型中獲得用于展示的必要數據。視圖通過發送適當的消息,也可以更新模型。這些問題和消息都要按照模型的術語來傳達,由此視圖必須得知道自己所要表現的模型,它的屬性都有什么語義。(比如說,視圖可能會詢問模型的標識符,期待返回一個Text的實例,但它可能并不認為模型就是Text類。)
控制器
控制器是用戶與系統之間的紐帶。它為用戶提供輸入,即它會將相關的視圖顯示在屏幕適當的位置上(供用戶瀏覽查看)。它為用戶提供輸出的手段,即它會向用戶展示菜單以及其他能接受命令和數據的控件。控制器接收到上述的用戶輸出,將其轉換為適當的消息,然后再將這些消息傳遞給一或多個視圖。
控制器不應該當作視圖來用,例如,不能用控制器來畫箭頭以連接視圖的節點。
從另一方面講,視圖也不應該關心用戶輸入,比如鼠標操作或按鍵操作之類的。在任何情況下,都應該能夠在控制器里編寫一個方法,該方法將消息發送到視圖,以便原原本本地再現用戶的命令。
編輯器
控制器負責連接其所有的視圖,這些視圖是該控制器的組成部分。有的視圖會提供一個特殊的控制器,叫編輯器(editor),以便用戶通過它來修改由視圖表現的信息。這種編輯器可以被掛接到控制器與其視圖之間的路徑上,類似于控制器的擴展。編輯完成之后,則從路徑上將編輯器移除并丟棄。
注意,編輯器要通過相關視圖的具體表現來與用戶溝通,因此編輯器與視圖是緊密相關的。控制器通過詢問視圖來獲悉編輯器的存在,除此之外沒有其他適當的信息來源。
原文鏈接:http://www.cn-cuckoo.com/2011/06/22/mvc-originals-2454.html
【編輯推薦】