最近在公司和一些同事交流的時(shí)候發(fā)現(xiàn)了一點(diǎn)剧防,就是大部分人其實(shí)是很難接受“代碼和數(shù)據(jù)沒(méi)有本質(zhì)區(qū)別”這一點(diǎn)的。舉例來(lái)說(shuō)辫樱,他們認(rèn)為一段HTML代碼(或者當(dāng)然也可以是JavaScript之類(lèi)的)峭拘,
<div id="1">
wahaha
</div>
和一段XML數(shù)據(jù)
<test>
subara
</test>
相比,意義是截然不同的狮暑。同樣鸡挠,作為分別執(zhí)行這兩段“字符串”的一個(gè)是瀏覽器,相比另一個(gè)可能是桌面客戶端之類(lèi)的C#程序搬男,也是有本質(zhì)區(qū)別的(區(qū)別當(dāng)然就是一個(gè)是執(zhí)行代碼決定怎么展示拣展,另一個(gè)只是用程序定義好的控件顯示傳過(guò)來(lái)的數(shù)據(jù))。當(dāng)時(shí)一起討論問(wèn)題的其實(shí)不乏一些資深的“工程師”和“開(kāi)發(fā)者”缔逛,但是聽(tīng)到一些人異口同聲的反駁我(并且沒(méi)有人主動(dòng)支持我的觀點(diǎn))時(shí)备埃,我不經(jīng)在腦海里想到,“他們不懂編程”褐奴,令人難過(guò)的是這太常見(jiàn)了按脚。
會(huì)引出這個(gè)話題,主要是開(kāi)始在討論MVC敦冬,然后就自然而然的說(shuō)起了SpringMVC辅搬,然后討論到作為View通常支持的一些模板語(yǔ)言(JSP、Velocity等)脖旱,很自然的我就提到了“不使用View也是一種View”伞辛,很顯然我所指的是常見(jiàn)的前后端分離的方式由后端應(yīng)用提供數(shù)據(jù)(例如JSON)來(lái)支持前端渲染的做法。
不幸的是夯缺,我的觀點(diǎn)(很奇怪的)并沒(méi)有得到大家的理解蚤氏,討論的過(guò)程就略去了,主要的分歧就是上面列出的觀點(diǎn)踊兜,大家普遍接受的觀點(diǎn)就是“View是指最終呈現(xiàn)在用戶面前的(這里就是Web頁(yè)面了)東西”竿滨,如果只是返回?cái)?shù)據(jù)的應(yīng)用,那就稱不上是MVC Web應(yīng)用,而是類(lèi)似于API應(yīng)用之類(lèi)的Whatever什么東西于游。
當(dāng)然毁葱,雖然討論的當(dāng)時(shí)我沒(méi)有想到要去列舉,但是其實(shí)我們是可以從Spring支持的ViewResolver類(lèi)型來(lái)倒推這個(gè)MVC框架設(shè)計(jì)者關(guān)于View的理解的贰剥。具體這里的ViewResolver除了模板語(yǔ)言視圖還支持哪些類(lèi)型的返回值就留給大家自己查詢和參考吧:)
然后關(guān)于代碼和數(shù)據(jù)的相關(guān)的思考倾剿,我記得最早是在<SICP>上看到的,當(dāng)然蚌成,在這里我也無(wú)意在做一遍并不準(zhǔn)確的解釋?zhuān)信d趣的人自然會(huì)去翻書(shū)前痘。。担忧。
> '(car (a b))
'(car (a b))
> (car '(car (a b)))
'car
> (cdr '(car (a b)))
'((a b))
大概就是這種感覺(jué)吧芹缔。當(dāng)然上面也不是說(shuō)把View單純當(dāng)做展現(xiàn)給用戶看得東西就是錯(cuò)的理解,只是在更加抽象瓶盛、簡(jiǎn)潔的解釋面前最欠,會(huì)顯得相對(duì)來(lái)說(shuō)不那么準(zhǔn)確了吧。就醬惩猫。