[]?
Martin.guo
?
J2ee
架構中一般都要考慮
Web Framework
的選擇。很多人選擇比較流行的
Struts
。項目組中遇到過這樣的情況,有些人不熟悉
Struts
,而有些人又對
Struts
青睞有加。有沒有一個折中的辦法來滿足所有的人呢?
?
我是這樣設計的:
通過攔截提交到
ActionServlet
上的
http
請求,經過
Http Parse
來收集請求參數,以
Name-Value
的形式存放為請求值對象,并且放在請求線程相關的上下文中。這個時候你就可以在
Action
執行結束前的任何地方拿到這些請求數據了。
?
在這個基礎上,我們保留了
Struts
的
Action
,并且規定
Action
的
execute
方法里不能出現任何跟業務相關的代碼
,
僅僅是負責頁面的流轉。
?
那么業務怎么辦呢?我們定義了一個接口
Command,
它也只有一個方法
,
我們也取名字為
execute,
并且沒有任何參數和返回數值。該方法的職責就是執行業務邏輯。這個時候你就要問了。
Action
里抽離業務邏輯,怎么調用
Command
呢?請求提交的數據怎么給
Command
呢
?Command
執行完后的業務數據怎么返回?
?
我們設計了一個業務執行器,它的功能就是執行
Command
的業務邏輯實現
.
而把執行器的執行寫到了
Action
里面。這樣就隔離了頁面流轉和業務執行。
Action
的代碼顯的很簡練和模板化。
?
由于請求數據是放在請求線程相關的上下文中,所以可以很方便的拿到。同時
Command
執行完畢的返回數據也是通過這個上下文返回給
Action
或者其他跟此請求線程相關的組件,說白一點就是此線程能夠跑到的任何代碼處都可以去跟上下文交互,存取線程相關的數據和服務。
?
設計到此為止,已經可以回答開頭的問題了。
?
對于熟悉
Struts
的人呢,可以積極放心的使用
Struts
標簽,使用
Formbean,
但有一點就是自己要把
FormBean
放到線程相關的上下文中,這樣你就可以在
Command
里面去拿出來工作了,同時
Command
執行完畢后,你就可以順手把返回數據填充到這個
FormBean
里面去了。跟你平時使用沒有太大區別。
?
而對于不熟悉的人呢,你可能不喜歡寫
Struts
標簽,也可能不喜歡死板的
Formbean,
那么
OK
,你完全不用關心這些,你只要直接在
Command
里面去寫邏輯代碼就可以了。但有一點就是要,你要手工把返回的數據集合放到
request
里面去,然后到流轉的
JSP
里面取出來展示。
?
OK
,皆大歡喜。
?
?
msn:gdq123@hotmail.com