需要什麼樣的mvc
在基於B/S的應用程序開發中,從基本的技術分工上來說就是兩大塊,一是軟件顯示界面,另一個是程序邏輯。在N年前的腳本語言時代,無論是asp、php還是jsp,我們基本是都是把這兩者柔和在一起的。盡管我們想方設法做好很多函數或者包含文件來努力達到軟件的復用,但仍然無法滿足多變的用戶需求,這主要是因為以前的純腳本編碼方式無法很好支持及應用面向對象(OO)領域中的強大功能。
在常見的B/S軟件項目中,界面的設計包括html界面、Wap界面及其它由文本字符協議為基本表示的界面等。以我們接觸最多的html頁面為例子,在做這些界面的時候往往需要美工先使用photoshop或fireworks等圖形界面設計工具進行全局設計,然後再使用進行Dreamweaver等html頁面制作工具進行加工制作。而強大的程序邏輯及後台處理都是由服務器端程序完成,這些程序具有較高的穩定性,其開發工具如JBuilder、Eclipse等對View層的界面無法很好的支持(當然那些用記事本寫界面的應用除外),這就使得很多MVC框架的設計都無法兩全齊美。
隨著Struts等MVC框架的陸續出現及應用,我們的視圖層變得越來越簡單。然而,仍然不時需要在頁面中插入Java代碼,比如另人討厭的@< import>。這些MVC框架大多提供了一系列的自定義標簽,當自定義標簽越來越復雜的時候,對於程序員簡單的同時,卻把咱們的美工及頁面制作人員給嚇壞了。
頁面及程序如何分離
EasyJWeb作為一個快速Java Web MVC框架,其設計目標不盡是要簡化軟件開發人員的代碼書寫工作,更是要能方便界面設計人員的工作。EasyJWeb通過基於模板的方式,建立在強大而簡單的模板引擎Velocity基礎上,並對Velocity作了一定的擴充。
Velocity是一個基於java的模板引擎(template engine),它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。作為一個比較完善的模板引擎,Velocity的功能是比較強大的,但強大的同時也增加了應用復雜性。
理論上你可以在EasyjWeb模板使用所有Velocity的腳本及功能,但我們不推薦你在界面模板中使用過多過復雜的腳本表達方式,在萬不得已的情況下,不要在界面模板中加入任何復雜的邏輯,更不要在界面模板中加入變量聲明、邏輯運算符等等。
在EasyJWeb中,我們提供了四條基本的模板腳本語句,基本上就能滿足所有應用模板的要求。這四條模板語句很簡單,可以直接由界面設計人員來添加。在當前很多EasyJWeb的應用實踐中,我們看到,所有界面模板中歸納起來只有下面五種簡單模板腳本語句即可實現:
1、$!obj 直接返回對象結果。
2、#if($!obj) #else #end 判斷語句
3、#foreach( $info in $list) $info.someList #end 循環讀取集合list中的對象,並作相應的處理。
4、#macro(macroName)#end 腳本函數(宏)調用,不推薦在界面模板中大量使用。
5、包含文件#include("模板文件名")或#parse("模板文件名")
EasyJWeb另外提供了很多工具類,通過這些工具類可以大大簡化模板的書寫。比如CommUtil中的toRowChildList,TagUtil中的options等。
通過使用Velocity模板腳本,可以使得視圖中除了與數據顯示有關的內容以外,不再有其它任何與特定語言相關的標記或符號。由於Velocity模板對界面不具備任何破壞性,因此就算添加了一系列的模板標記後,美工及頁面制作人員不用作任何額外的特殊處理,就能看到純天然的界面視圖。另外還能通過半小時就能學會了解Velocity腳本的用法,根據客戶的審美觀、習慣乃至心情靈活的更改系統界面。
方便他人即是方便自己
EasyJWeb之所以提倡頁面模板及程序分離,一個重要原因就是解放程序員。給他人方便就等於給自己方便,EasyJWeb中包含了這樣的生活哲學。因此,作為程序員,接觸一段時間EasyJWeb後,你會發現除了讓視圖界面的人員方便的以外,EasyJWeb最主要關照的還是咱們這些審美觀經常被批評,最討厭那些亂七八糟的html代碼,css樣式以及患有圖片恐懼症的程序員。因此,EasyJWeb讓程序員非常輕松與視圖層的內容打交道。比如要把一個對象發送給視圖層,只需要在Action中使用form.addResult(“name”,obj)即可,要把一個對象分成各屬性發送給視圖層,可以直接使用form.addPo(obj)方法即可;要從視圖層表單中讀取數據到對象中,只需要form.toPo(obj)即可;EasyJWeb為了處理了數據轉換、驗證、數據保護等諸多細節。