雖然Html不是和互連網同時誕生,但如今它們的緊密關係,讓人幾乎一忽略了這段曆史。Html有如此強的生命力力,應用如此之廣,自從W3C宣布H已死之後,卻又在別處開了花,Html 5的發展卻又反過來,逼得W3C接受又繼續發展。
然 後,自Html設計之出,就主要針對靜態內容的表現,這也註定其天生缺陷。互連網已從起初的內容表現,發展到應用的平台,在應用程度領域上已經足以與案頭 程式抗衡一一你還在用Foxmail收郵件嗎?甚至原本的內容發布應用本身,也趨於釆取動態產生的方式來實現,看看有多少CMS系統就清楚了。
然而,Html的天生缺陷,面向內容而不是面向邏輯,讓我們產生Html的工作成了魔鬼拼圖,使用者在前台看到的完美夢幻介面,在後台卻是成千上萬的魔幻片段。
是的,一個魔一個夢,一字之異,差之千裡。
所 幸,業界一直致力變革。先期CSS 1,2,3,Javascript特別是JQuery,分別貢獻於樣式和行為的分離,這些都是片段組成部分。因 而,HTML可以只關注於內容及其結構,純粹化的很重要一部分。這裡不作詳敘,因為網路上有太多的文章和論敘,儘管很多的網站建設,連這些技術都沒 應用好。
這裡,我只想講講後CSS,jQuery時代的故事。
那怕只作內容的呈現,仍有很多的機會產生片段。不變的內容和變化或說動態內 容交替出現,前者直接用HTMLTML代碼,後者常常需要後台代碼,變數的支援。兩者是完全不同的領域範圍,整合在一起,自然造成了不可理解的片段拼盤。 就如同進程一樣,切換進程是成本最高的開銷,片段的本質就是邏輯內容相關的切換,無論開發人員的書寫還是閱讀理解,都是高成本,最終成為開發壁磊。
解決方䅁就是,統一語境,至少大量減少切換頻。
Asp,Net Web Form就是一個不錯的嘗試,HTML標記對象化,把不變內容HTML標記,統一到後台語境。一個個HTML標記都成為後台對象,變數填充自然在後台,以對象賦值的方式,統一的實施,跨越了語境的切換。這也是Web Form命名的含義,讓網頁像案頭一樣一致編程。應該,說微軟的這個技術方向還是比較成功的。至少,我就是在這個環境下,得進入Web行業,反過來,從背景模型學習HTML前台DOM。
然而,Web Form的敗筆卻在架構方面,對象化HTML後,背景處理反過來,全都以頁面為中心概念,妄圖忽略前端與後端的時間差(服務端控制項?),真的把互連網當成了本地高速網了?
ASP MVC呼之即出,從1到3,4也在測試當中,發展相當之快。雖然,是背景架構改變,對前端的影響也是巨大的。MVC結構不能再延用Web Form了,那是雞同鴨講。
曆史總在繞圏圈,我們又回到ASP時代,用嵌入的變數拼湊HTML代碼。
<span><%=Value%></span>
從一片空白開始,重新出發。很快,微軟推出了HtmlHelper,一點一點,把片段重新粘合起來。MVC3又推出了Razor視圖引擎,讓視圖真正成為模板,當然後面仍有一個類在支援視圖,但提供了更大的靈活性支援擴充,前文有詳敘。而且,Razor在文法上也進一步減少片段,不用結束符,不用加角括弧,智能識別環境變化,是HTML模式還是後台模式? 所有這些是解決本文開始所描述的片段問題,代碼片段和思維的片段。
完了?等等,所有這些似乎只是再為我們最後的英雄出場作準備。真正讓Html行雲流水,Fluent Html.
http://lunaverse.wordpress.com/category/ms-mvc/fluenthtml/
看看產生表格的一段代碼吧,一段代碼勝過一千張圖。
@model IEnumerable<ExamDTO>@this.Grid(Model).Columns(c=>{ c.For(x => x.Code).Named("代碼"); c.For(x => x.Name).Named("名稱"); c.For(x=>"刪除").Named("操作");}).Empty("沒有記錄!")