posts - 176, comments - 240, trackbacks - 0, articles - 7
          引用:
          如果在Action Centric的框架,要避免兩個(gè)訪問點(diǎn),可以這么定義。
          view.do?&templateName=a &objectName=/@Demo&objectEvent=test

          這 種做法就是程序自己處理而不是框架支持了。我說過,工作就是那么多,只是框架做什么和程序作什么的分工而已。說jsplet是page為中心也不太準(zhǔn)確, jsplet是以對象為中心,只是指定了希望使用的視圖頁面而已。view.jsp放在前面只是jsp實(shí)現(xiàn)上的一個(gè)問題,

          引用:
          Action Centric 確實(shí)比較麻煩,必須同時(shí)傳入角色列表 和 用戶列表的 分頁信息。 JSPLet對于這個(gè)問題是怎么處理的?


          很簡單包含兩個(gè)子頁面
          list_both.jsp
          <jsp:include page="role_list.jsp?objectName=/@RoleManager" />
          <jsp:include page="user_list.jsp?objectName=/@UserManager"/>
          在 訪問的時(shí)候通過指定eventTarget參數(shù)即可將事件路由到合適的對象,沒有響應(yīng)事件的對象thisObj里的內(nèi)容不變,因?yàn)榍芭_view顯示內(nèi)容也 不變。注意這里role_list.jsp和RoleManager, UserManager對象都是獨(dú)立開發(fā)的。

          引用:
          這個(gè)時(shí)候,role_list.jsp 和 user_list.jsp里面都有一個(gè) thisObj。而且這兩個(gè)thisObj的scope都是 sesession ?


          注 意所有的對象模型都需要狀態(tài)保持機(jī)制,所以thisObj確實(shí)被保持在session中。在webwork2中如果希望在多個(gè)action之間協(xié)調(diào),則必 須將某個(gè)對象保留在session中,否則就是采用無狀態(tài)模型,所有的狀態(tài)數(shù)據(jù)都持久化在數(shù)據(jù)庫中,每次輸出的頁面都和某個(gè)action產(chǎn)生綁定(一種行 為相關(guān)),則根本無法實(shí)現(xiàn)上述例子中的分解過程,因?yàn)樵赼ction模型中狀態(tài)與行為無法抽象到一起并重用! 當(dāng)頁面顯示邏輯比較復(fù)雜的情況下,頁面本身也有一些臨時(shí)狀態(tài)需要保持,MVC并不是意味著所有的狀態(tài)都是需要持久化到數(shù)據(jù)庫中的關(guān)鍵業(yè)務(wù)數(shù)據(jù)。在每個(gè)層次 上都可能需要保持狀態(tài),MVC只是說某些狀態(tài)變量更加重要,可以驅(qū)動其它層次而已。
          另外說thisObj的scope是session也是不 準(zhǔn)確的。首先注意到j(luò)splet通過對象化實(shí)現(xiàn)了將狀態(tài)和行為抽象到一起,此后程序就擁有了對這個(gè)整體的控制權(quán),在jsplet中存在著對象的生命周期控 制,對象的scope是自定義的,對象的生命周期是session的子部分,而不是整個(gè)session生命周期范圍內(nèi)都存在。請注意一下這種控制策略帶來 的可擴(kuò)展性。我們擁有了對象生命周期的控制權(quán),依然可以采用無狀態(tài)設(shè)計(jì),但在需要保持狀態(tài)的時(shí)候,可以做到。而在webwork這樣的action模型中 是沒有這種選擇權(quán)的。

          引用:
          session過度使用是不好的


          thisObj只是允許使用session,是否使用session可以自行決定,這是一種使能技術(shù),而沒有object支持,結(jié)果是無法有效的使用。另外,請仔細(xì)看清楚,objectScope是一種非常精細(xì)的資源使用控制手段。

          另 外不要把設(shè)計(jì)理念和性能混為一談。設(shè)計(jì)體現(xiàn)的是對概念的把握,能夠達(dá)到合適的抽象,而性能是實(shí)際實(shí)現(xiàn)過程中的限制。在概念能夠支持的情況下,可以采用技術(shù) 手段解決性能問題,或者退化到較低的層次,這是一種選擇權(quán)。而概念無法支持的情況下,就需要各種穿墻打洞的方法來實(shí)現(xiàn)。

          thisObj重要的是概念,如果需要,它可以把狀態(tài)序列化到cookie或者dotNet那種參數(shù)中,這只是個(gè)實(shí)現(xiàn)問題。

          引用:

          JSPLet Action 必須是 JSP ?


          當(dāng)然可以是任何java類, JSP Action只是IEventListener接口的一個(gè)實(shí)現(xiàn) 。在jsplet最初的版本中,action只能寫在java文件中。稍后改為可以寫在jsp中也可以寫在java中

          引用:
          WebWork的Action本身就是模型對象


          這是WebWork弱的地方,它因?yàn)槭腔赼ction的,沒有對象化,所以只有以action作為模型對象的載體,無法捕獲多個(gè)action之間的狀態(tài)相關(guān)性。
          完全無狀態(tài)的設(shè)計(jì)正是因?yàn)闆]有合適載體造成的。而jsplet中thisObj可以看作是對session的局域化,是對session的分解。jsplet中的很多概念在webwork這種面向action的框架中都能找到對應(yīng),只是加上了很多限制并且變得模糊了。

          引用:
          沒有model1簡易(jstl+javabean) 沒有struts的"優(yōu)雅" 定位模糊.

          jsplet 是以非常精煉的方式實(shí)現(xiàn)對象化。再說一次,不要把jsplet的定位向那些開源框架上靠。jsplet的開發(fā)時(shí)間大概與那些開源框架同時(shí)進(jìn)行的。仔細(xì)看看 設(shè)計(jì)中的可擴(kuò)展性。xwork的所有特性jsplet都可以實(shí)現(xiàn),而且jsplet多提供的部分就是對象化。



          可 以使用 并不意味著必須使用,所有無狀態(tài)設(shè)計(jì)都可以一樣應(yīng)用。jsplet是一種事件驅(qū)動設(shè)計(jì),在這一點(diǎn)上,更像是Tapestry或者JSF。基于 actioin的設(shè)計(jì)是真正的無能使用session,它不敢應(yīng)用session的原因是它對session沒有控制力。而在jsplet中對 session的使用控制是很自然的:當(dāng)你需要對象的時(shí)候,當(dāng)你需要這個(gè)狀態(tài)的時(shí)候,它才存在。它出現(xiàn)是因?yàn)樾枰嬖凇T诿嫦騛ction的框架中,你 仍然需要解決狀態(tài)問題。只是框架無法提供支撐,自己解決而已。
          我想,大概大多數(shù)人開發(fā)的程序都是CURD的堆砌,所以很難理解一個(gè)復(fù)雜的應(yīng)用中的狀態(tài)管理的必要性。有了對象支持之后,才構(gòu)成整個(gè)框架的概念上的完備性。
          主站蜘蛛池模板: 蒙山县| 晋中市| 南郑县| 古田县| 北碚区| 石屏县| 蓬莱市| 且末县| 西乌珠穆沁旗| 宜兴市| 桐柏县| 赫章县| 富蕴县| 巴楚县| 台北市| 延边| 延安市| 呈贡县| 康定县| 恩施市| 桐梓县| 隆安县| 嵊泗县| 蛟河市| 大厂| 永福县| 五河县| 冀州市| 陇西县| 达孜县| 石台县| 剑河县| 佳木斯市| 南和县| 敦煌市| 遂川县| 通道| 辽宁省| 莱州市| 宁远县| 福泉市|