驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明_第1頁(yè)
驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明_第2頁(yè)
驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明_第3頁(yè)
驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明_第4頁(yè)
驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、驗(yàn)證平臺(tái)開(kāi)發(fā)說(shuō)明1驗(yàn)證平臺(tái)概述按照計(jì)劃,到2011年10月底,新平臺(tái)預(yù)研項(xiàng)目給出一個(gè)功能最小化的開(kāi)發(fā)環(huán)境,簡(jiǎn)稱(chēng) 驗(yàn)證平臺(tái),現(xiàn)對(duì)這個(gè)驗(yàn)證平臺(tái)的使用進(jìn)行說(shuō)明。1.1平臺(tái)結(jié)構(gòu)預(yù)想平臺(tái)的分層結(jié)構(gòu)為:尸持久化/數(shù)據(jù)服務(wù)、JPA對(duì)象映射存儲(chǔ)服務(wù)底層擴(kuò)展自定義數(shù)據(jù)訪(fǎng)問(wèn)層訪(fǎng)問(wèn)工具數(shù)據(jù) 集平臺(tái)已明確區(qū)分?jǐn)?shù)據(jù)服務(wù)層和業(yè)務(wù)服務(wù)層。數(shù)據(jù)服務(wù)層借助JPA技術(shù)實(shí)現(xiàn)Java對(duì)象 與關(guān)系數(shù)據(jù)庫(kù)的映射(ORM);平臺(tái)對(duì)數(shù)據(jù)服務(wù)層進(jìn)行了簡(jiǎn)單的封裝,提供了一個(gè)基礎(chǔ) 的DAO類(lèi)和一個(gè)工具類(lèi),可對(duì)簡(jiǎn)單實(shí)體對(duì)象進(jìn)行增刪改、分頁(yè)查詢(xún)、自定義條件查詢(xún) 等操作,復(fù)雜的實(shí)體對(duì)象操作需要開(kāi)發(fā)人員擴(kuò)展基礎(chǔ)DAO類(lèi)自己實(shí)現(xiàn)。業(yè)務(wù)服務(wù)層是相對(duì)獨(dú)立的,它

2、向下依賴(lài)數(shù)據(jù)服務(wù)層,對(duì)上層的接入層提供業(yè)務(wù)支撐, 不依賴(lài)于某種界面實(shí)現(xiàn)技術(shù)。由于業(yè)務(wù)服務(wù)和具體的業(yè)務(wù)緊密相關(guān),平臺(tái)沒(méi)有提供基礎(chǔ) 類(lèi),只是要求每個(gè)業(yè)務(wù)服務(wù)必須定義接口,其實(shí)現(xiàn)類(lèi)作為spring的bean,這樣方便進(jìn) 行事務(wù)控制和接入層使用。接入層實(shí)際上就是應(yīng)用的展示層,可以實(shí)現(xiàn)多種展現(xiàn)技術(shù)的接入。平臺(tái)采用 STRUTS2作為WEB框架、以JSP的方式進(jìn)行展現(xiàn)。由于進(jìn)行展現(xiàn)的數(shù)據(jù)的類(lèi)型不固定, 平臺(tái)只能進(jìn)行簡(jiǎn)單的封裝,對(duì)頁(yè)面和服務(wù)器的交互流程進(jìn)行控制,對(duì)業(yè)務(wù)服務(wù)的調(diào)用等 業(yè)務(wù)邏輯都需要開(kāi)發(fā)人員自己實(shí)現(xiàn)。2二次開(kāi)發(fā)說(shuō)明2.1項(xiàng)目源文件組織結(jié)構(gòu)平臺(tái)的底層支持包分為四個(gè):JPA支持的common.jar

3、、框架的framework.jar、STRUTS2 接入的s2ui.jar和基于STRUTS2的標(biāo)簽s2tag.jar,這些包將伴隨著框架添加到應(yīng)用的classpath 中??蚣艿陌鼘哟螀⒖枷聢D:白矽NAPj j 0辱 se白.容 highsoft:common界 entily由-田 frameworkEntityBeanJava也-島 framewo-rk(j)-0 bizservice: : :由-引 ca chad ata畝-由 con-f-fj datas-ervicej j j田-任! eKception由-出init畝由 rncdelI I I 身喪uii iii 也-研 stru

4、ts| |中冊(cè) actionE-Fj- dispatcher i-S filterE-P0- interceptorsmodelweb action j-JT E ea n Acti d n Uti IJ a va- lXj stru tw-frs m ewo-rk.xm I:由-由 utilE-由 view! 0-& IM ETA-INFJRE System Library jdkl5O_O4由# J2EE 1.4 Librariesjdoc|lib:r=JPA支持實(shí)體及元數(shù)據(jù)文件存放處,按 模塊劃分子包實(shí)體的基類(lèi)業(yè)務(wù)邏輯數(shù)據(jù)服務(wù)|接入層STRUTS2接入層 基礎(chǔ)action框架使用的act

5、ion2.2數(shù)據(jù)服務(wù)層數(shù)據(jù)服務(wù)層默認(rèn)提供一個(gè)持久化單元;支持基于實(shí)體、JPQL的分頁(yè)、條件查詢(xún)、更新等基礎(chǔ)操作,暫不提供基于JDBC的傳統(tǒng)SQL操作,但允許使用JPA中的nativeSql。實(shí)體通 過(guò)注釋標(biāo)注,平臺(tái)提供工具把庫(kù)表映射為實(shí)體,并產(chǎn)生元數(shù)據(jù)文件。數(shù)據(jù)服務(wù)器層提供的類(lèi)有:基礎(chǔ)類(lèi)功能IDAO 和 BaseDAO 類(lèi)IDAO是數(shù)據(jù)DAO通用接口,BaseDAO就是它的實(shí)現(xiàn)類(lèi),可執(zhí)行 基于實(shí)體、JPQL的增刪改、條件查詢(xún)、分頁(yè)查詢(xún)的功能。BaseDAO 是一個(gè)抽象類(lèi),必須擴(kuò)展才能使用。開(kāi)發(fā)者自己實(shí)現(xiàn)的DAO,可 用Spring進(jìn)行管理。JPAUtil為簡(jiǎn)化數(shù)據(jù)層的開(kāi)發(fā),平臺(tái)提供通用的數(shù)據(jù)操

6、作工具類(lèi)JPAUtil, 其利用泛型技術(shù),可支持絕大多數(shù)基于實(shí)體、JPQL的數(shù)據(jù)操作。 它是一個(gè)工具類(lèi),直接使用即可。SequenceUtil序號(hào)生成器的工具類(lèi),用于為實(shí)體、業(yè)務(wù)生成各類(lèi)的序列號(hào)。EntityMetaDataUtil獲取實(shí)體元數(shù)據(jù)的工具類(lèi),每個(gè)實(shí)體都有個(gè)xml文件描述元數(shù)據(jù) 信息,這個(gè)工具類(lèi)根據(jù)實(shí)體名稱(chēng)獲取元數(shù)據(jù)對(duì)象。EntityMetaData實(shí)體的元數(shù)據(jù)定義模型,記錄實(shí)體的元數(shù)據(jù)、Java類(lèi),主鍵策略 等。EntityFieldMetaData記錄實(shí)體屬性列的元數(shù)據(jù),包括庫(kù)表字段,類(lèi)型,長(zhǎng)度,精度, 擴(kuò)展屬性,導(dǎo)出屬性等。QueryParamJPA操作時(shí)使用的參數(shù)對(duì)象。Qu

7、eryParamListJPA操作時(shí)使用的參數(shù)對(duì)象列表輔助構(gòu)建器。EntityBean實(shí)體的基礎(chǔ)bean類(lèi),所有實(shí)體都要從它擴(kuò)展。2.3通用數(shù)據(jù)模型平臺(tái)還提供了兩個(gè)通用模型類(lèi),當(dāng)頁(yè)面展示的數(shù)據(jù)不是實(shí)體時(shí),需要用到這兩個(gè)類(lèi)。類(lèi)說(shuō)明FieldMetaData記錄數(shù)據(jù)對(duì)象擴(kuò)展屬性的基礎(chǔ)類(lèi)。BaseBean頁(yè)面展示數(shù)據(jù)類(lèi)型的基類(lèi)。2.4接入層struts2基礎(chǔ)類(lèi)struts2不需要form裝載數(shù)據(jù),數(shù)據(jù)都直接放在action中,所以struts2的開(kāi)發(fā)人員只需 要實(shí)現(xiàn)action和jsp。目前平臺(tái)只提供了一個(gè)基礎(chǔ)action,即BasicAction,使用時(shí),需要用 一個(gè)頁(yè)面展示多條數(shù)據(jù),另一個(gè)頁(yè)面編

8、輯數(shù)據(jù),而且一次只能編輯一條數(shù)據(jù)。為了配合頁(yè)面展示數(shù)據(jù)的需要,平臺(tái)封裝了一個(gè)DataWrap類(lèi),對(duì)頁(yè)面數(shù)據(jù)進(jìn)行了包裝, 它相當(dāng)于一個(gè)包裹,對(duì)數(shù)據(jù)列表、行號(hào)、單條數(shù)據(jù)、固定查詢(xún)條件和分頁(yè)對(duì)象進(jìn)行了打包。 action中使用DataWrap作為展示數(shù)據(jù)屬性,動(dòng)態(tài)表格使用它的dataList屬性,F(xiàn)reeform使用data屬性,這兩個(gè)屬性的值沒(méi)有關(guān)聯(lián),action需要自己對(duì)他們分別維護(hù)。由于DataWrap采 用了泛型技術(shù),子類(lèi)必須提供具體類(lèi)型,而且要體現(xiàn)在get方法中,BasicAction根據(jù)這個(gè)類(lèi)型處理頁(yè)面上傳的數(shù)據(jù),否則數(shù)據(jù)無(wú)法上傳。BasicAction除了對(duì)一個(gè)默認(rèn)的DataWrap進(jìn)

9、行支持外,對(duì)多DataWrap展示也提供了支 持,子類(lèi)需要重載getExtendDataWrapName方法,以提供擴(kuò)展的DataWrap屬性名稱(chēng),擴(kuò)展的DataWrap屬性都由子類(lèi)自己定義。下面我們?cè)敿?xì)看一下BasicAction提供的方法。方法功能init進(jìn)彳丁頁(yè)面數(shù)據(jù)的初始化,根據(jù)retrieveAfterInit屬性值決定是否檢 索數(shù)據(jù)。initTreat子類(lèi)在這里進(jìn)行分頁(yè)信息設(shè)置等。retrieve查詢(xún)方法,只是簡(jiǎn)單的返回input”。子類(lèi)重載時(shí)要為默認(rèn)的 dataWrap和擴(kuò)展的dataWrap設(shè)置數(shù)據(jù)。update更新方法,只是簡(jiǎn)單的調(diào)用了 retrieve方法,讓頁(yè)面返回到列表

10、 頁(yè)面。更新操作的業(yè)務(wù)邏輯需要子類(lèi)自己實(shí)現(xiàn)。add添加新數(shù)據(jù)的方法,只是簡(jiǎn)單的返回edit”,讓頁(yè)面轉(zhuǎn)到單條數(shù)據(jù) 編輯頁(yè)面。子類(lèi)需要?jiǎng)?chuàng)建新的數(shù)據(jù)對(duì)象。edit編輯數(shù)據(jù)方法,只是簡(jiǎn)單的返回edit”。子類(lèi)需要自己設(shè)置維護(hù)的 數(shù)據(jù),可利用DataWrap的rowIndex屬性。remove刪除數(shù)據(jù)的方法,只是簡(jiǎn)單的調(diào)用了 retrieve方法。子類(lèi)需要自 己確定要?jiǎng)h除的數(shù)據(jù)并調(diào)用業(yè)務(wù)服務(wù)進(jìn)行刪除。toExcel把頁(yè)面顯示的數(shù)據(jù)導(dǎo)出到excel,需要有兀數(shù)據(jù)提供標(biāo)題和數(shù)據(jù)類(lèi) 型等信息。如果數(shù)據(jù)是實(shí)體則自動(dòng)獲取實(shí)體的兀數(shù)據(jù),否則需要 子類(lèi)必須實(shí)現(xiàn)getCustomMetaData方法以提供兀數(shù)據(jù)信息。

11、有多個(gè) 數(shù)據(jù)集則導(dǎo)出currentDataWrap表示 的DataWrap。toExcelFull同toExcel,區(qū)別是導(dǎo)出的數(shù)據(jù)是子類(lèi)通過(guò)getAllDataList()方法提供的數(shù)據(jù)。getAllDataList需要子類(lèi)實(shí)現(xiàn)的方法,在toExcelFull使用,提供導(dǎo)出的數(shù)據(jù)集合。getSelectedDataWrap計(jì)算currentDataWrap對(duì)應(yīng)DataWrap對(duì)象,直接使用即可getMetaData獲取currentDataWrap對(duì)應(yīng)的DataWrap列1表數(shù)據(jù)的兀素的兀數(shù)據(jù), 供導(dǎo)出時(shí)使用。如果元素是實(shí)體,那么直接找出實(shí)體屬性的元數(shù) 據(jù),否則需要子類(lèi)實(shí)現(xiàn)getCustom

12、MetaData提供。getCustomMetaDataDataWrap元素類(lèi)型不是實(shí)體時(shí)子類(lèi)重載這個(gè)方法提供元數(shù)據(jù)。export()導(dǎo)出時(shí)調(diào)用這個(gè)方法彈出選擇導(dǎo)出列頁(yè)面。子類(lèi)不需要重載。getExcelFileName子類(lèi)重載這個(gè)方法設(shè)置導(dǎo)出exce l時(shí)顯示的文件名稱(chēng)。getPdfFileName子類(lèi)重載這個(gè)方法設(shè)置導(dǎo)出pdf時(shí)顯示的文件名稱(chēng)。getDataWrap返回默認(rèn)的DataWrap。DataWrap是個(gè)泛型類(lèi),子類(lèi)實(shí)現(xiàn)時(shí)必須指 明具體類(lèi)型。getPropertysetProperty用于頁(yè)面?zhèn)鬏敂?shù)據(jù)用的Map。getCurrentDataWrapsetCurrentDataWra

13、p頁(yè)面中展示多個(gè)DataWrap時(shí),用于記錄當(dāng)前操作的DataWrap,值 為對(duì)應(yīng)DataWrap的屬性名稱(chēng)。getExtendDataWrapName頁(yè)面中展示多個(gè)DataWrap時(shí),用這個(gè)方法說(shuō)明擴(kuò)展的DataWrap對(duì) 應(yīng)的屬性名稱(chēng)。prepare處理頁(yè)面的上傳數(shù)據(jù),在STRUTS2的Preparable中調(diào)用,子類(lèi)如果 重載,必須調(diào)用父類(lèi)的方法。對(duì)action的補(bǔ)充說(shuō)明:采用注釋的機(jī)制管理Struts2,不需要維護(hù)struts2的XML配置文件。2.action由Spring進(jìn)行管理,Action中使用的服務(wù)對(duì)象可以按照bean名稱(chēng)實(shí)現(xiàn)自動(dòng)注入, action中聲明的服務(wù)對(duì)象屬性名稱(chēng)必

14、須是服務(wù)對(duì)象的spring bean名稱(chēng)。2.5校驗(yàn)WEB程序的校驗(yàn)分服務(wù)端校驗(yàn)和客戶(hù)端校驗(yàn)兩部分,STRUTS2對(duì)服務(wù)端校驗(yàn)支持的很好, 應(yīng)用程序如果需要直接使用即可,方式有action重載validate方法和書(shū)寫(xiě)校驗(yàn)配置文件、使 用校驗(yàn)攔截器。這里就不詳細(xì)說(shuō)明了。下面重點(diǎn)說(shuō)明客戶(hù)端校驗(yàn),其實(shí)STRUTS2對(duì)客戶(hù)端 校驗(yàn)也有支持,不過(guò)有很多限制,經(jīng)過(guò)比較平臺(tái)采用了 jquery的客戶(hù)端校驗(yàn)框架。平臺(tái)在 它的基礎(chǔ)上做了封裝,開(kāi)發(fā)時(shí)只需在標(biāo)簽上設(shè)置校驗(yàn)屬性即可,現(xiàn)在Freeform標(biāo)簽的列已 經(jīng)支持。由于框架目前無(wú)法對(duì)操作狀態(tài)進(jìn)行記錄,動(dòng)態(tài)表格的全屏編輯模式無(wú)法發(fā)揮作用, 所以未提供動(dòng)態(tài)表格的

15、校驗(yàn)功能。這些標(biāo)簽中和校驗(yàn)相關(guān)的屬性有:屬性說(shuō)明accept要求的文件擴(kuò)展名稱(chēng)。equalto要求兀素值和另一個(gè)元素的值相同,如設(shè)置密碼需要重復(fù)輸入一次,重 復(fù)輸入的密碼必須和第一次輸入的密碼相同。maxlength可輸入字符的最大長(zhǎng)度。minlength可輸入字符的最小長(zhǎng)度。maxvalue可輸入的最大數(shù)值。minvalue可輸入的最小數(shù)值。range可輸入的值范圍,如0,13,要求只能輸入0到13直接的數(shù)字。rangelength可輸入的字符長(zhǎng)度范圍,如2,6,要求最少輸入2個(gè)字符,最大6個(gè)字 符。regexp正則表示式。regexpmessage正則表達(dá)式的規(guī)則說(shuō)明。remote請(qǐng)求遠(yuǎn)程

16、資源進(jìn)行合法性檢查,如:check-email.do。required是否必需輸入,true或false。validator自定義的校驗(yàn)規(guī)則,開(kāi)發(fā)人員需要使用jquery的jQuery.validator.addMethod方法定義好校驗(yàn)規(guī)則,如:jQuery.validator.addMethod(domain, function(value, element) (return this.optional(element) |/Ahttp:VV/.test(value);, Please specify the correct domain for your documents);Valid

17、ator 的值就是這里 jQuery.validator.addMethod 的第一個(gè)參數(shù) domain。validatortypejquery 內(nèi)置的校驗(yàn)類(lèi)型,有:email、date、datelSO、number、number、 numberDE、digits、creditcardo2.6關(guān)于單元測(cè)試單元測(cè)試,可以讓測(cè)試流程變得簡(jiǎn)單高效,同時(shí)更好的保證代碼質(zhì)量。WEB項(xiàng)目執(zhí)行 單元測(cè)試的最大問(wèn)題是無(wú)法脫離應(yīng)用服務(wù)器。平臺(tái)對(duì)單元測(cè)試進(jìn)行了探索和試驗(yàn),發(fā)現(xiàn) spring對(duì)此提供了支持,只要有spring環(huán)境,就可以使用junit進(jìn)行單元測(cè)試。Junit是一個(gè) 很小測(cè)試工具,但是由于它的精巧設(shè)計(jì)

18、,讓測(cè)試變得簡(jiǎn)單,特別是Junit從版本4開(kāi)始已經(jīng) 支持通過(guò)注解來(lái)定義測(cè)試用例,使測(cè)試更加方便。推薦做法為:新建一個(gè)工程作為測(cè)試工程,新建一個(gè)工程讓程序結(jié)構(gòu)清晰,測(cè)試代碼不會(huì)混淆業(yè) 務(wù)代碼。原有工程和源碼都要鏈到測(cè)試工程下,注意各個(gè)包也需要鏈接過(guò)來(lái)。然后將測(cè)試包加入到classpath。測(cè)試需要的包有:spring-test.jarjunit4.4.jarspring-mock-2.0.8.jarspring-test-2.5.6.jarstruts2-junit-plugin-2.2.3.jarstruts-testng-plugin-2.2.3jartestng-5.1.jarDAO和Service只需要在Sprin

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論