国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

java高級應(yīng)用符合oo慣例的表現(xiàn)層控制

2019-11-18 12:20:22
字體:
供稿:網(wǎng)友

  Hibernate的reference的副標題叫做:符合java慣例的O/R 持久化,這揭示了目前三層結(jié)構(gòu)的重大問題,就是三層的不統(tǒng)一。到目前為止,仍然難于在web界面上實現(xiàn)C/S模式中"master-detail","lookup"的快捷的用戶交互。
  
  目前常見的web application的結(jié)構(gòu),包含web browser/application server/database。database占據(jù)主流的仍然是經(jīng)典的E/R模型,這個模型是基于行集的,因此在vb/Delphi/power builder的實踐中,data source/table set都是基于行集的,odbc/jdbc driver也都是基于行集的。view層的DbGrid也是基于行集的,和Entity模型對應(yīng)得非常好,開發(fā)簡易直觀,相信這是C/S模式得到迅速推廣的重點原因之一。“master-detail”,"lookup"都是C/S模式下極為常見和直觀的關(guān)聯(lián)模式。
  
  但本質(zhì)上,Object pascal/java都是面向?qū)ο蟮摹T诖耍统霈F(xiàn)了一次重大的不統(tǒng)一:OO vs E-R。出現(xiàn)的解決方式就是EJB和O/R mapping 工具。EJB的entity bean是早期的entity封裝形式。但是和現(xiàn)在以hibernate為代表的先進工具(對POJO執(zhí)行持久化)比較起來,在OO與ER的對應(yīng)上顯得粗笨而難于使用。在這些工具中,代表OO與E-R融合的最本質(zhì)的功能則是繼續(xù)樹與表結(jié)構(gòu)的對應(yīng)關(guān)系。hibernate2支持整棵繼續(xù)樹與一個表對應(yīng)、繼續(xù)樹中每個類與一個表對應(yīng)兩種基本的對應(yīng)關(guān)系,而hibernate 3引入的join標記則更可以將二者融合,實現(xiàn)每個類可選與基類在同一個表中持久或者在新表中保存部分持久數(shù)據(jù),可以說hibernate 3把這個對應(yīng)的任務(wù)完成得非常出色。"master-detail","lookup"則對應(yīng)hbm.xml這樣的映射文件中的"one-many","many-one"關(guān)聯(lián)。
  
  database與java的融合完成之后,下一步,不可避免的就是現(xiàn)有的web client與服務(wù)器端代碼之間的融合。從表面上看,web client大多采用Html/javascript完成,而服務(wù)器端采用java輸出,二者是簡單的命令/反饋的模型,這個模型從model 1發(fā)展到MVC的模型后,編寫代碼變得清楚,但是開發(fā)人員仍然發(fā)現(xiàn),編寫web app仍然不是一件簡單的事情。struts/webwork仍然只是非常底層的基礎(chǔ),對編寫客戶端業(yè)務(wù)對象沒有什么幫助。比如說,在服務(wù)器端java程序建模時,大家已經(jīng)習慣用pojo分析訂單/客戶/產(chǎn)品,但是在編寫web client時,struts/webwork都只能幫助你完成頁面提交/反饋的流程,卻不能幫助你分析客戶端業(yè)務(wù):新建訂單時,選擇了客戶之后,判定此客戶是否有足夠的預(yù)收款,這樣一個簡單用例在程序員心目中的反映仍然是每個字段的input tag,每個頁面post上來的model,以及如何用action的處理再次渲染下一個頁面。
  
  最大的問題,就是作為表現(xiàn)層的web client端代碼與服務(wù)器端代碼蘊含的語義脫節(jié)。具體表現(xiàn)在:
  
  在采用struts/webwork這樣的MVC結(jié)構(gòu)的時候,通常不會考慮在客戶端進行業(yè)務(wù)控制,比如由javascipt判定預(yù)收款是否足夠。因此需要不斷的多次頁面刷新才能完成整個邏輯。
  
  要解決此問題,通常可以采用把業(yè)務(wù)邏輯部分轉(zhuǎn)移到客戶端,以Javascript + xmlhttp或javascript + web service,java applet/application,甚至采用Office平臺(嵌入代碼到Excel)完成整個業(yè)務(wù)邏輯。也有很多問題:
  
  1,若要在客戶端實現(xiàn)業(yè)務(wù)邏輯,可能客戶端代碼沒有對應(yīng)Pojo這樣的基礎(chǔ)object設(shè)施。javascript缺乏如interface這樣的基礎(chǔ)結(jié)構(gòu)。excel方案在這點更加難于進行,因為整個開發(fā)涉及到的語言太多,造成開發(fā)難度加大,項目控制困難。
  
  直接后果就是,難于在客戶端代碼中定義"master-detail","lookup"等關(guān)聯(lián)。就算在項目規(guī)劃中在javascript中定義pojo(plain old javascript object)及其關(guān)聯(lián),也難于利用hbm.xml這樣的現(xiàn)成關(guān)聯(lián)描述。
  
  2,客戶端基礎(chǔ)設(shè)施難于進行界面元素綁定。在處理大量數(shù)據(jù)時,excel方案在此體現(xiàn)出杰出的優(yōu)勢,客戶對內(nèi)置程序的excel的接受程度非常高,但缺點是這種excel程序難于做到xmlhttp可以輕松做到的動態(tài)查詢等特性。
  
  3,客戶端基礎(chǔ)設(shè)施難于與服務(wù)器端進行交互。xmlhttp以及web service可選,但是在企業(yè)應(yīng)用中其低下效率可能會帶來服務(wù)器的壓力隱患,降低性能和吞吐量。若excel方案,則同樣面臨著與服務(wù)器數(shù)據(jù)交互的難題。不管是xmlhttp方案還是application方案,都面臨著拋棄struts/webwork重新實現(xiàn)request/response dispatch的要求。
  
  4,客戶端基礎(chǔ)設(shè)施難于進行單元測試。有junit4js,port了junit 3.8.1,但沒有成熟的stub/mock工具。excel方案在此幾乎不可測試。
  
  5, 客戶端基礎(chǔ)設(shè)施難于調(diào)試。javascript缺乏類似log4j這樣的log工具(log4js http://www.petrusrex.com/PRogrammes/jslib.htm ;這樣的工具還遠沒有成熟),也難于進行斷點跟蹤。excel方案倒是有完整的vba環(huán)境。
  
  6, 客戶端基礎(chǔ)設(shè)施運行效率低。javascipt/vba都是解釋語言,難于實現(xiàn)復雜邏輯,其性能決定只能用它們進行細粒度的界面控制。
  
  7,由于瀏覽器的分裂,造成語言的不標準,應(yīng)用程序難以跨平臺使用。在IE平臺上可以使用behavior和eXPression這種類AOP的操作,卻無法在mozilla中實現(xiàn)。
  
  jsf方案有望成為備選方案,但是按照myfaces目前的情況,要實現(xiàn)更多的表現(xiàn)層控件,才能完成更復雜靈活的控制。
  
  下面一次軟件開發(fā)方式的突破,向前看,可能出現(xiàn)設(shè)計方式的突破,MDA是方向;另一個方向就是向后對具體實現(xiàn)的突破,在類似webapp這樣的具體技術(shù)(除了webapp,application同樣面臨類似問題)上,對于是否能夠把model的定義直接帶入到表現(xiàn)層,JSF和.NET可能會有新一輪競爭

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西和县| 湘西| 洪洞县| 新野县| 陕西省| 镇远县| 什邡市| 安远县| 阿克陶县| 广元市| 江华| 潼南县| 吉隆县| 策勒县| 棋牌| 军事| 佛教| 东莞市| 奉新县| 铁岭市| 沁水县| 河南省| 外汇| 防城港市| 汝阳县| 临潭县| 石泉县| 海门市| 雷波县| 北川| 曲沃县| 手游| 合阳县| 华池县| 建水县| 菏泽市| 花莲县| 外汇| 保山市| 长葛市| 邵东县|