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