NCHR開(kāi)發(fā)框架設(shè)計(jì)說(shuō)明書(shū).doc_第1頁(yè)
NCHR開(kāi)發(fā)框架設(shè)計(jì)說(shuō)明書(shū).doc_第2頁(yè)
NCHR開(kāi)發(fā)框架設(shè)計(jì)說(shuō)明書(shū).doc_第3頁(yè)
NCHR開(kāi)發(fā)框架設(shè)計(jì)說(shuō)明書(shū).doc_第4頁(yè)
NCHR開(kāi)發(fā)框架設(shè)計(jì)說(shuō)明書(shū).doc_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

NCHRNCHR 開(kāi)發(fā)框架開(kāi)發(fā)框架 設(shè)計(jì)設(shè)計(jì)說(shuō)明書(shū)說(shuō)明書(shū)文章標(biāo)題文章標(biāo)題 作作 者 者 丁建昕丁建昕 王星王星 曾誠(chéng)曾誠(chéng) 創(chuàng)建日期 創(chuàng)建日期 2005 xx12 xx15 修改日期 修改日期 2005 xx12 27xx 修改次數(shù) 修改次數(shù) 0 變更記錄變更記錄 標(biāo)題 第 27 2 頁(yè) 變更日期變更日期變更內(nèi)容變更內(nèi)容變更原因變更原因變更人變更人 YYYY MM DD 標(biāo)題 第 27 3 頁(yè) 目目 錄錄 1 引言引言 5 1 1 編寫(xiě)目的 5 1 2 背景 5 1 3 定義 5 1 4 參考資料 5 2 程序系統(tǒng)的結(jié)構(gòu)程序系統(tǒng)的結(jié)構(gòu) 6 2 1 橫向來(lái)看 6 2 2 縱向來(lái)看 6 2 3 從框架開(kāi)發(fā)者的角度 6 2 4 從應(yīng)用開(kāi)發(fā)者的角度 6 3 基礎(chǔ)結(jié)構(gòu)基礎(chǔ)結(jié)構(gòu) BASEUI 相關(guān)類設(shè)計(jì)說(shuō)明相關(guān)類設(shè)計(jì)說(shuō)明 7 3 1 程序描述 7 3 2 功能 7 3 2 1 BaseUI類 7 3 2 2 狀態(tài)控制 8 3 2 3 按鈕管理 9 3 2 4 動(dòng)作管理 10 3 2 5 數(shù)據(jù)持久化 11 4 快速開(kāi)發(fā)模板快速開(kāi)發(fā)模板 FRAMEUI 相關(guān)類設(shè)計(jì)說(shuō)明相關(guān)類設(shè)計(jì)說(shuō)明 12 4 1 程序描述 12 4 2 功能 14 4 2 1 界面展現(xiàn) 14 4 2 2 按鈕和動(dòng)作管理 15 5 按鈕管理按鈕管理 BUTTONMANAGER 相關(guān)類設(shè)計(jì)說(shuō)明相關(guān)類設(shè)計(jì)說(shuō)明 16 5 1 關(guān)鍵詞 16 5 2 功能說(shuō)明 16 5 3 按鈕管理相關(guān)類 16 5 3 1 類圖 17 5 3 2 ButtonManager類說(shuō)明 18 5 3 3 AbstractBtnRgst類說(shuō)明 19 5 3 4 ButtonStateRegister類說(shuō)明 21 5 3 5 StateRegister類說(shuō)明 22 6 MAINBILLCARDPANEL 設(shè)計(jì)說(shuō)明設(shè)計(jì)說(shuō)明 23 6 1 MAINPANEL父類說(shuō)明 23 6 1 1 MainPanel的設(shè)計(jì)意圖 23 6 1 2 MainPanel的方法說(shuō)明 23 6 2 MAINBILLCARDPANEL說(shuō)明 26 標(biāo)題 第 27 4 頁(yè) 7 MAINBILLLISTPANEL 設(shè)計(jì)說(shuō)明設(shè)計(jì)說(shuō)明 27 1200 標(biāo)題 第 27 5 頁(yè) 引言 1 1 編寫(xiě)目的編寫(xiě)目的 詳細(xì)說(shuō)明 UIFrame 的設(shè)計(jì)思想 層次結(jié)構(gòu) 類之間的關(guān)系 適用讀者為 UIFrame 的開(kāi)發(fā)者和使用者 1 2 背景背景 針對(duì)界面開(kāi)發(fā)中代碼結(jié)構(gòu)不合理的問(wèn)題提供一個(gè)解決方案及規(guī)范 1 3 定義定義 UIFrame 框架名稱 UI 類 界面入口程序 Panel 組織存放各種控件 DataModel 保存當(dāng)前狀態(tài) 發(fā)送狀態(tài)信息 同服務(wù)器端通訊 按鈕 界面上菜單位置的按鈕控件 不包括其它 動(dòng)作 點(diǎn)擊按鈕時(shí)要完成的事情 觀察對(duì)象及被觀察對(duì)象 當(dāng)被觀察對(duì)象改變時(shí) 觀察對(duì)象響應(yīng)被觀察對(duì)象的變化 狀態(tài) 界面響應(yīng)用戶的操作會(huì)導(dǎo)致控件狀態(tài)變化 可用 不可用 可見(jiàn) 不可見(jiàn) 注冊(cè) 將功能或是數(shù)據(jù)類以參數(shù)形式告知管理類 由管理類負(fù)責(zé)調(diào)用 1 4 參考資料參考資料 標(biāo)題 第 27 6 頁(yè) 程序系統(tǒng)的結(jié)構(gòu) 2 1 橫向來(lái)看橫向來(lái)看 UIFrame 是以 UI 類作為程序的入口和控制中心 結(jié)合 DataModel 類進(jìn)行狀態(tài)控制 結(jié)合 ButtonManager 進(jìn)行按鈕控制 同時(shí)以各個(gè) Panel 為被控制單元 在各種動(dòng)作類 Action 中進(jìn)行調(diào)度 2 2 縱向來(lái)看縱向來(lái)看 UIFrame 分為兩個(gè)層次 以 BaseUI 為中心的相關(guān)類作為最上層 完成 UIFrame 的基 本功能 狀態(tài)控制 按鈕管理 以 FrameUI 為中心的相關(guān)類繼承于 BaseUI 以模板形式提 供額外的快速開(kāi)發(fā)能力 2 3 從框架開(kāi)發(fā)者的角度從框架開(kāi)發(fā)者的角度 需要考慮的是如何為框架添加更多的快速開(kāi)發(fā)能力 即繼承 BaseUI 相關(guān)類 形成與 FrameUI 平行的各種模板類 2 4 從應(yīng)用開(kāi)發(fā)者的角度從應(yīng)用開(kāi)發(fā)者的角度 直接繼承各種模板類 充分利用模板已經(jīng)實(shí)現(xiàn)的各種功能 擴(kuò)展自己的業(yè)務(wù)功能 有一點(diǎn)需要特別注意 嚴(yán)格禁止應(yīng)用開(kāi)發(fā)者繼承 BaseUI 相關(guān)類 標(biāo)題 第 27 7 頁(yè) 基礎(chǔ)結(jié)構(gòu) BaseUI 相關(guān)類設(shè)計(jì)說(shuō)明 3 1 程序描述程序描述 ToftPanel B Ba as se eU UI I h hr r u ui if fr ra amme e mmo od de el l D Da at ta aMMo od de el lStateChangeListener b bu ut tt to on n B Bu ut tt to on nMMa an na ag ge er r BaseUI 相關(guān)類組成 UIFrame 的基礎(chǔ)結(jié)構(gòu) 為所有其它 UI 相關(guān)類的父類 完成 UIFrame 的最基本功能 涉及類 BaseUI DataModel ButtonManager StateRegister AbstractButtonRegister Button StateRegister StateChangeEvent 類名描述父類接口 BaseUI 程序入口 負(fù)責(zé)調(diào)度所有 資源 包括 DataModel ButtonManag er ToftPanel DataModel 保存當(dāng)前狀態(tài) 發(fā)送狀態(tài) 事件 同后臺(tái)通訊 ButtonManager 管理全部按鈕 包括其名 稱 動(dòng)作 狀態(tài) StateChangeLister StateRegister 狀態(tài)列表 AbstractButtonRegister 按鈕列表 ButtonStateRegister 按鈕對(duì)應(yīng)狀態(tài)列表 StateChangeEvent 狀態(tài)事件 EventObject 涉及接口 StateChangeListener ICommand 接口名描述父接口 StateChangeListener 響應(yīng)狀態(tài)改變 EventListener ICommand 響應(yīng)按鈕動(dòng)作 3 2 功能功能 3 2 1 BaseUI 類類 程序入口 繼承于 ToftPanel 界面的控制中心 負(fù)責(zé)調(diào)度界面的所有資源 包括按 鈕 Panel DataModel 組織各個(gè) Panel 獲得了 BaseUI 的引用即獲得了掌控界面資源的 標(biāo)題 第 27 8 頁(yè) 入口 BaseUI 并不直接操縱各種控件 按鈕的處理交給 ButtonManager 負(fù)責(zé) 控件的處理 交給各個(gè)子 Panel 負(fù)責(zé) 狀態(tài)及數(shù)據(jù)持久化交給 DataModel 負(fù)責(zé) 這些類的實(shí)例化都在 BaseUI 類中進(jìn)行 以下是 BaseUI 中創(chuàng)建他們的方法 可以根 據(jù)業(yè)務(wù)不同在 BaseUI 的子類中進(jìn)行重寫(xiě) 具體使用方法參考 javadoc 方法名稱參 數(shù) 返回值描述 createDataModelDataModel 根據(jù)業(yè)務(wù)不同 創(chuàng)建 DataModel 的子類 例如 要實(shí)現(xiàn)復(fù)雜查詢 createButtonStateRegisterButtonStateRegister 根據(jù)業(yè)務(wù)不同 創(chuàng)建 ButtonStateRegister 的 子類 例如自定義按鈕的 狀態(tài) createBtnRegisterAbstractButtonRegister 根據(jù)業(yè)務(wù)不同 創(chuàng)建 AbstractButtonRegister 的子類 例如自定義按鈕 注 ButtonManager 不需要開(kāi)發(fā)者創(chuàng)建 由 getBtnManager 方法進(jìn)行實(shí)例化 createButtonStateRegister 和 createBtnRegister 作為 ButtonManager 構(gòu)造方法的參數(shù) 傳到 ButtonManager 中 BaseUI 中的其它方法 方法名稱參數(shù)返回值描述 getTitle 返回界面標(biāo)題重寫(xiě)父類方法 默認(rèn) 返回在功能節(jié)點(diǎn)上注 冊(cè)的名字 如有不同 可在子類中重寫(xiě) OnButtonClicked 點(diǎn)擊按鈕時(shí)調(diào)用重寫(xiě)父類方法 將按 鈕操作轉(zhuǎn)移到 ButtonManager 不允 許子類重寫(xiě) setButtons 設(shè)置按鈕重寫(xiě)父類方法 擴(kuò)大 其可視范圍 不允許 子類重寫(xiě) updateButtons 更新按鈕重寫(xiě)父類方法 擴(kuò)大 其可視范圍 不允許 子類重寫(xiě) 3 2 2 狀態(tài)控制狀態(tài)控制 涉及 DataModel StateChangeListener StateChangeEvent StateRegister 狀態(tài) 控制還包括按鈕狀態(tài) 在此處不做詳細(xì)介紹 請(qǐng)參考 ButtonManager 說(shuō)明 狀態(tài)控制的原理主要是采用事件發(fā)送 監(jiān)聽(tīng)機(jī)制 需要狀態(tài)控制的類實(shí)現(xiàn) StateChangeListener 接口 當(dāng)調(diào)用 DataModel 的 setCurrentState 方法時(shí) 將狀態(tài)事件 StateChangeEvent 發(fā)送到實(shí)現(xiàn) StateChangeListener 接口的類 這些類將自動(dòng)響應(yīng)狀態(tài)的 變化 StateChangeListener 類中的方法只有一個(gè) stateChanged 方法名稱參數(shù)返回值描述 標(biāo)題 第 27 9 頁(yè) stateChangedStateChangeEvent 實(shí)現(xiàn) StateChangeListener 接口的類需要在這個(gè) 方法中填寫(xiě)業(yè)務(wù)相關(guān) 的狀態(tài)設(shè)置 StateChangeEvent 中的方法主要是設(shè)置 獲取當(dāng)前狀態(tài) 當(dāng)實(shí)現(xiàn)了 StateChangeListener 的類在方法中獲得了 StateChangeEvent 實(shí)例 就可獲得當(dāng)前的狀態(tài) 方法名稱參數(shù)返回值描述 getCurrentState 返回當(dāng)前狀態(tài)獲得當(dāng)前狀態(tài) setCurrentStateInt 設(shè)置當(dāng)前狀態(tài)由 DataModel 進(jìn)行調(diào) 用 開(kāi)發(fā)者不用調(diào)用 StateRegister 主要用于狀態(tài)列表 如果有自定義狀態(tài)列表 需要繼承實(shí)現(xiàn)自己的狀 態(tài)列表 在子類中添加靜態(tài)常量 重寫(xiě) getAllStateIDs 方法 StateRegister 類的初始化 是在 DataModel 的 createState 方法中進(jìn)行 方法名稱參數(shù)返回值描述 getCurrentState 返回當(dāng)前狀態(tài)由 DataModel 進(jìn)行調(diào) 用 開(kāi)發(fā)者不用調(diào)用 setCurrentStateInt 設(shè)置當(dāng)前狀態(tài)由 DataModel 進(jìn)行調(diào) 用 開(kāi)發(fā)者不用調(diào)用 getAllStateIDsint 獲得當(dāng)前界面所用 的狀態(tài)列表 由子類重寫(xiě) 返回業(yè) 務(wù)所需狀態(tài)列表 DataModel 類關(guān)于狀態(tài)方面的功能主要是保存當(dāng)前狀態(tài) 此處只介紹狀態(tài)方面的方法 數(shù)據(jù)持久化的方法在數(shù)據(jù)持久化一節(jié)中介紹 方法名稱參數(shù)返回值描述 addStateChangeListenerStateChangeListener 添加狀態(tài)監(jiān)聽(tīng) removeStateChangeListenerStateChangeListener 刪除狀態(tài)監(jiān)聽(tīng) fireStateChanged 發(fā)送狀態(tài)事件 由 DataModel 自 身調(diào)用 setCurrentStateInt 設(shè)置當(dāng)前狀態(tài) 同時(shí)將狀態(tài)改變 發(fā)送出去 getCurrentStateint 獲取當(dāng)前狀態(tài) 與狀態(tài)事件中的 狀態(tài)是一致的 createStateStateRegister 創(chuàng)建 StateRegister 由子類重寫(xiě) 實(shí) 現(xiàn)業(yè)務(wù)需要的狀 態(tài)列表 getStateStateRegister 獲得 StateRegister setStateStateRegister 設(shè)置 StateRegister 3 2 3 按鈕管理按鈕管理 界面上的按鈕統(tǒng)一由 ButtonManager 控制 包括按鈕的名稱 狀態(tài) 動(dòng)作 標(biāo)題 第 27 10 頁(yè) ButtonManager 的實(shí)例化由 BaseUI 進(jìn)行 不用開(kāi)發(fā)者參與 但是 ButtonManager 的參數(shù)需 要開(kāi)發(fā)者在 BaseUI 的子類中實(shí)現(xiàn) 請(qǐng)參考 BaseUI 一節(jié)和 ButtonManager 一節(jié)獲取詳細(xì)信 息 3 2 4 動(dòng)作管理動(dòng)作管理 interface h hr r u ui if fr ra amme e a ac ct ti io on n I IC Co ommmma an nd d u ui if fr ra amme e a ac ct ti io on n E Ed di it tL Li in ne eA Ac ct ti io on n a ac ct ti io on n D De el le et te eL Li in ne eA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n P Pr ri in nt tA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n S Sa av ve eA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n A Ad dd dA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n A Ab bs st tr ra ac ct tA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n A Ad dd dL Li in ne eA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n C Ca an nc ce el lA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n E Ed di it tA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n R Re ef fr re es sh hA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n Q Qu ue er ry yA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n D De el le et te eA Ac ct ti io on n 動(dòng)作管理實(shí)際上是按鈕管理的一部分 當(dāng)點(diǎn)擊按鈕所要做的事情是由 ButtonManager 負(fù)責(zé)調(diào)度的 ButtonManager 的調(diào)度過(guò)程請(qǐng)參考 ButtonManager 一節(jié) 此處主要討論 ICommand 接口 每個(gè)按鈕動(dòng)作都實(shí)現(xiàn)了 ICommand 接口 開(kāi)發(fā)人員不必關(guān)心如何執(zhí)行業(yè)務(wù)邏輯的調(diào)用 只需要實(shí)現(xiàn) ICommand 接口的 execute 方法 并將動(dòng)作注冊(cè)到 ButtonManager 即可 從而簡(jiǎn) 化開(kāi)發(fā)模型 減少出錯(cuò)機(jī)率 每個(gè)按鈕的名稱將同按鈕的動(dòng)作相分離 提高了靈活性 每個(gè)動(dòng)作都可重用 增加 了可維護(hù)性 方法名稱參數(shù)返回值描述 execute 執(zhí)行業(yè)務(wù)邏輯 validateboolean 執(zhí)行前進(jìn)行校驗(yàn) 返 回 true 則調(diào)用 execute false 則不 調(diào)用 AbstractAction 實(shí)現(xiàn)了 ICommand 接口 提供了一些基本方法的實(shí)現(xiàn) 方法名稱參數(shù)返回值描述 getFrameUIFrameUI 獲取 FrameUI getMainPanelMainPanel 獲取 MainPanel getDataModelDataModel 獲取 DataModel validateboolean 動(dòng)作執(zhí)行前校驗(yàn) 空 標(biāo)題 第 27 11 頁(yè) 方法 子類重寫(xiě) 可 用于前臺(tái)校驗(yàn) getCheckMethodString 子類繼承 返回一個(gè) 包含類名和類中一個(gè) 方法的字符串 共后 臺(tái)校驗(yàn)使用 字符串 中包含的類應(yīng)該放在 bs 端 3 2 5 數(shù)據(jù)持久化數(shù)據(jù)持久化 數(shù)據(jù)持久化操作全部集中在 DataModel 中進(jìn)行 方便自動(dòng)單元測(cè)試 以下論述只涉 及到 DataModel 的持久化方法 狀態(tài)相關(guān)方法請(qǐng)參考狀態(tài)控制一節(jié) 方法名稱參數(shù)返回值描述 onDeleteObjectboolean 刪除數(shù)據(jù) 空方法 由子類繼承后重寫(xiě) onQuery Class String SuperVO 查詢數(shù)據(jù) 用于單表 查詢 Class 指明表 對(duì)應(yīng)的 VO String 指 明查詢條件 空方法 由子類繼承后重寫(xiě) onSaveObjectObject 保存數(shù)據(jù) 空方法 由子類繼承后重寫(xiě) 返回保存的數(shù)據(jù) queryDataByHeadVO SuperVO String HRAggVO 根據(jù)主表數(shù)據(jù)查詢 返回主表及子表數(shù)據(jù) 空方法 由子類繼承 后重寫(xiě) 標(biāo)題 第 27 12 頁(yè) 4 快速開(kāi)發(fā)模板快速開(kāi)發(fā)模板 FrameUI 相關(guān)類設(shè)計(jì)說(shuō)明相關(guān)類設(shè)計(jì)說(shuō)明 4 1 程序描述程序描述 BaseUI F Fr ra amme eU UI I UIPanel StateChangeListener T To op pP Pa an ne el l UIPanel StateChangeListener L Le ef ft tP Pa an ne el l UIPanel StateChangeListener Observer MMa ai in nP Pa an ne el l i immp pl l MMa ai in nB Bi il ll lC Ca ar rd dP Pa an ne el l BillEditListener BillEditListener2 u ui if fr ra amme e i immp pl l MMa ai in nB Bi il ll lL Li is st tP Pa an ne el l h hr r u ui if fr ra amme e i immp pl l L Le ef ft tT Tr re ee eP Pa an ne el l u ui if fr ra amme e i immp pl l L Le ef ft tT Ta ab bl le eP Pa an ne el l h hr r u ui if fr ra amme e i immp pl l L Le ef ft tL Li is st tP Pa an ne el l FrameUI 相關(guān)類繼承了 BaseUI 相關(guān)類 除了保留父類的狀態(tài)控制 按鈕管理的功能 外 還提供了模板式的快速開(kāi)發(fā)能力 主要表現(xiàn)在 標(biāo)準(zhǔn)按鈕動(dòng)作的實(shí)現(xiàn) 標(biāo)準(zhǔn)狀態(tài)控制 標(biāo)準(zhǔn)界面類型 特別是針對(duì)單據(jù)模板提供了 MainBillListPanel 和 MainBillCardPanel 兩 個(gè)類處理單據(jù)模板相關(guān)操作 請(qǐng)參考 MainBillListPanel 和 MainBillCardPanel 兩節(jié)內(nèi)容 FrameUI 針對(duì) HR 界面特點(diǎn) 將界面分為幾個(gè)部分 按鈕下的導(dǎo)航條 TopPanel 左邊 的導(dǎo)航欄 LeftPanel 可能是樹(shù) 表或列表 數(shù)據(jù)的主要顯示界面 MainPanel 其中 MainPanel 必須存在 TopPanel LeftPanel 可以根據(jù)用戶設(shè)置決定是否存在 MainPanel 中可以存放標(biāo)準(zhǔn)的單據(jù)模板 也可以存放各種控件 提供最大的靈活性 對(duì)界面的操作是以 Panel 為單元進(jìn)行的 即按鈕動(dòng)作不直接調(diào)用 Panel 中每個(gè)控件 的設(shè)置方法 而是調(diào)用 Panel 中的方法 由 Panel 自己在調(diào)用其中的控件設(shè)置方法 這是 為了減少動(dòng)作和 Panel 之間的耦合 同時(shí)可減少動(dòng)作的數(shù)量 開(kāi)發(fā)者應(yīng)當(dāng)注意 換個(gè)說(shuō)法 就是盡量把 Panel 作為一個(gè)控件來(lái)用 涉及界面類 FrameUI MainPanel LeftPanel TopPanel MainBillListPanel MainBillCardPanel LeftTreePanel LeftTablePanel LeftListPanel 標(biāo)題 第 27 13 頁(yè) 類名描述父類接口 FrameUI 程序入口 資源控制中心 組合各個(gè) Panel 類 BaseUI MainPanel 顯示數(shù)據(jù)詳細(xì)信息 點(diǎn)擊 LeftPanel 時(shí)自動(dòng)響應(yīng)點(diǎn) 擊事件 UIPanel StateChangeListener Observer LeftPanel 導(dǎo)航樹(shù) 或表 或列表 UIPanelStateChangeListener TopPanel 導(dǎo)航欄 可以存放查詢的 前置條件 UIPanelStateChangeListener MainBillListPanel 封裝 BillListPanel MainPanel MainBillCardPanel 封裝 BillCardPanel MainPanel LeftTreePanel 導(dǎo)航樹(shù) LeftPanel LeftTablePanel 導(dǎo)航表 LeftPanel LeftListPanel 導(dǎo)航列表 LeftPanel 涉及數(shù)據(jù)持久化類 BillDataModel 此類繼承了 DataModel 重寫(xiě)了其中的空方法 類名描述父類接口 BillDataModel 其數(shù)據(jù)持久化的相關(guān)方法主要針對(duì) 單據(jù)模板 如果不是這樣 子類應(yīng) 當(dāng)重寫(xiě) DataModel 涉及動(dòng)作類 AddAction AddLineAction CancelAction DeleteAction DeleteLineAction EditAct ion EditLineAction PrintAction QueryAction RefreshAction SaveAction 每個(gè) 動(dòng)作都對(duì)應(yīng)一個(gè)按鈕 使用時(shí)需要在 ButtonManager 中進(jìn)行注冊(cè) 類名描述父類接口 AddAction 新增 只是清空界面數(shù)據(jù) AbstractAction AddLineAction 增加行 為表格添加一個(gè)空行 AbstractAction CancelAction 取消 取消新增或編輯 AbstractAction DeleteAction 刪除 刪除界面數(shù)據(jù)同時(shí)刪除后 臺(tái)數(shù)據(jù) AbstractAction DeleteLineAction 刪除行 刪除表格中的一行 AbstractAction EditAction 編輯 將數(shù)據(jù)填充到界面 同時(shí) 設(shè)置界面控件可用 AbstractAction EditLineAction 編輯行 AbstractAction PrintAction 打印 調(diào)用單據(jù)模板的打印功能 如果沒(méi)有使用單據(jù)模板則需要自 己實(shí)現(xiàn) AbstractAction QueryAction 查詢 調(diào)用查詢模板查詢數(shù)據(jù) 同時(shí)更新界面數(shù)據(jù) AbstractAction RefreshAction 刷新 重新查詢數(shù)據(jù)填充到界面 AbstractAction SaveAction 保存 將修改或新增的數(shù)據(jù)持久 化 AbstractAction 涉及工具類 TreeUtilities 類名描述父類接口 TreeUtilities 對(duì)樹(shù)操作的工具類 包括創(chuàng)建 DefaultTreeModel 添加 刪除 查找節(jié)點(diǎn) 在 DefaultTreeModel 上 放的樹(shù)節(jié)點(diǎn)類型為 DefualtMutableTreeNode 的子類 FrameTreeNode 其中的 標(biāo)題 第 27 14 頁(yè) UserObject 放的是 HRAggVO 涉及其它類 FrameTreeNode HRAggVO 類名描述父類接口 FrameTreeNode 對(duì) DefaultMutableTreeNode 的重新包裝 用于將 SuperVO 直接轉(zhuǎn)化成具有父 子關(guān)系的樹(shù)節(jié)點(diǎn) DefaultMutableTreeNode HRAggVO 對(duì)單據(jù)模板 VO 的實(shí)現(xiàn)類 ExtendedAggregatedValueObject 4 2 功能功能 4 2 1 界面展現(xiàn)界面展現(xiàn) 涉及類 FrameUI MainPanel LeftPanel TopPanel MainBillListPanel MainBillCardPanel LeftTreePanel LeftTablePanel LeftListPanel FrameUI 類是整個(gè)界面的核心 負(fù)責(zé)組織 MainPanel LeftPanel TopPanel 初始 化按鈕 方法名稱參數(shù)返回值描述 createLeftPanelLeftPanel 默認(rèn)返回 LeftTreePanel 如果 需要其它類型則需要 在子類中重寫(xiě)此方法 返回 LeftPanel 子類 createMainPanelMainPanel 默認(rèn)返回 MainPanel 如果需要 其它類型則需要在子 類中重寫(xiě)此方法 返 回 MainPanel 子類 createTopPanelTopPanel 默認(rèn)返回 TopPanel 如果需要其它類型則 需要在子類中重寫(xiě)此 方法 返回 TopPanel 子類 initButtons 此方法為抽象方法 子類在此實(shí)現(xiàn)初始化 按鈕 initialize 此方法初始化各個(gè) Panel 和按鈕 getSplitPane 創(chuàng)建 UISplitPane 為私有方法 開(kāi)發(fā)者 無(wú)需關(guān)心 needLeftPanelboolean 抽象方法 設(shè)置是否 使用 LeftPanel 由 開(kāi)發(fā)者實(shí)現(xiàn) true 為 需要 false 為不需 標(biāo)題 第 27 15 頁(yè) 要 needTopPanelboolean 抽象方法 設(shè)置是否 使用 TopPanel 由開(kāi) 發(fā)者實(shí)現(xiàn) true 為需 要 false 為不需要 FrameUI 還負(fù)責(zé)打印模板 查詢模板的配置工作 如果一個(gè)節(jié)點(diǎn)有多個(gè)查詢模板 則 在使用 QueryAction 之前應(yīng)當(dāng)設(shè)置好 FrameUI 的 queryNodeKey 屬性 如果有常用查詢條件 還要設(shè)置對(duì)應(yīng) queryNodeKey 的常用查詢的 UIPanel 同樣 如果一個(gè)節(jié)點(diǎn)有多個(gè)打印模板 則在使用 PrintAction 之前應(yīng)當(dāng)設(shè)置好 FrameUI 的 printNodeKey 屬性 方法名稱參數(shù)返回值描述 getQueryDialogQueryConditionClient 返回查詢模板 程 序自動(dòng)根據(jù)功能注 冊(cè)的節(jié)點(diǎn)號(hào) 設(shè)置 的 nodeKey 查找查 詢模板 getNormalQueryPanelUIPanel 返回常用查詢 UIPanel setNormalQueryPanelUIPanel 設(shè)置常用查詢 UIPanel getQueryNodeKeyString 返回查詢模板 nodeKey setQueryNodeKeyString 設(shè)置查詢模板 nodeKey getPrintNodeKeyString 返回打印模板 nodeKey setPrintNodeKeyString 設(shè)置打印模板 nodeKey MainPanel 類中的方法大多為空方法 MainBillListPanel MainBillCardPanel 為 針對(duì)兩種單據(jù)模板的 MainPanel 的實(shí)現(xiàn)類 具體使用請(qǐng)參考相關(guān)章節(jié) 4 2 2 按鈕和動(dòng)作管理按鈕和動(dòng)作管理 按鈕和動(dòng)作管理的工作在 ButtonManager 中進(jìn)行 具體使用請(qǐng)參考 ButtonManager 一節(jié) 標(biāo)題 第 27 16 頁(yè) 按鈕管理 ButtonManager 相關(guān)類設(shè)計(jì)說(shuō)明 5 1 關(guān)鍵詞關(guān)鍵詞 系統(tǒng)按鈕系統(tǒng)按鈕 在 AbstractBtnRgst 類中以靜態(tài)常量方式注冊(cè)的按鈕常量所代表的按鈕 我們 叫做系統(tǒng)按鈕 當(dāng)然并不是每一個(gè)系統(tǒng)按鈕都會(huì)被系統(tǒng)管理起來(lái) 系統(tǒng)默認(rèn)管理的系統(tǒng)按鈕 只包括 SYSBTN QUERY 查詢 SYSBTN ADD增加 SYSBTN EDIT修改 SYSBTN SUBOPERATION子集操作 SYSBTN ADD LINE增行 SYSBTN DEL LINE刪行 SYSBTN INSERT LINE插入行 SYSBTN EDIT LINE修改行 SYSBTN SAVE保存 SYSBTN CANCEL取消 SYSBTN DELETE刪除 SYSBTN REFRESH刷新 SYSBTN PRINT打印 自定義按鈕自定義按鈕 除去系統(tǒng)按鈕 其他所有用戶添加的按鈕都屬于自定義按鈕 動(dòng)作動(dòng)作 命令命令 指一些業(yè)務(wù)相關(guān)的一系列操作的集合 比如 保存 刪除 封存解封等 5 2 功能說(shuō)明功能說(shuō)明 ButtonManager 主要的功能包括兩部分 第一部分是按鈕狀態(tài)管理 這里的按鈕狀 態(tài)主要是指按鈕的可用性和可見(jiàn)性 第二部分是所有框架事件的響應(yīng) 這些事件指廣義事 件 可以是按鈕事件 也可以不是按鈕事件 5 3 按鈕管理相關(guān)類按鈕管理相關(guān)類 下表列出了按鈕管理的主要相關(guān)類 類名描述父類接口 ButtonManager 負(fù)責(zé)按鈕管理的實(shí)體類 StateChangeListener AbstractBtnRgst 按鈕注冊(cè)類 所有的在系統(tǒng) 按鈕注冊(cè)在基類 AbstractBtnRgst 中 各個(gè)模 塊的自定義按鈕注冊(cè)在具體 標(biāo)題 第 27 17 頁(yè) 的子類之中 ButtonStateRegister 負(fù)責(zé)注冊(cè)按鈕在一個(gè)具體狀 態(tài)下的具體行為 包括可用 可視兩種屬性 StateRegister 狀態(tài)注冊(cè)類 負(fù)責(zé)注冊(cè)狀態(tài) 列表 5 3 1 類圖類圖 A Ab bs st tr ra ac ct tB Bu ut tt to on nR Re eg gi is st te er r isContainBtnID boolean AbstractButtonRegister createSysBtnVOByID ButtonVO createUserBtnVOByID ButtonVO B Bu ut tt to on nS St ta at te eR Re eg gi is st te er r ButtonStateRegister addStateVO void getButtonStateVOByStateID ButtonStateVO addUserButtonStateVO void addSystemButtonStateVO void StateChangeListener B Bu ut tt to on nMMa an na ag ge er r ButtonManager isCommandExecutable boolean isCommandExecutable boolean executeCommand void executeCommand void loadState void isValidBtnsID boolean registerCommand void registerCommand void addStatusVO boolean addChildButtonByVO boolean addButtonByVO boolean setButtonEnabled void setButtonVisiable void addChildButtonsByIDs boolean addButtonByID boolean finishButtons void getButtonByID ButtonObject getButtonStateVOByID ButtonStateVO stateChanged void interface u ui if fr ra amme e a ac ct ti io on n I IC Co ommmma an nd d execute void executable boolean ToftPanel n nc c u ui i h hr r u ui if fr ra amme e B Ba as se eU UI I BaseUI createDataModel DataModel createButtonStateRegister ButtonStateRegister createBtnRegister AbstractButtonRegister onButtonClicked void updateButtons void handleException void s st ta at te e S St ta at te eR Re eg gi is st te er r STATE INIT int STATE EDIT int STATE ADD int STATE CANCEL int STATE NOTEDIT int STATE ROOT SELECTED int STATE FOLDER SELECTED int STATE LEAF SELECTED int allStates int p pe e p pu ub b P PE EB Bu ut tt to on nR Re eg gi is st te er r createUserBtnVOByID ButtonVO 注意 以上類圖中的 PEButtonRegister 類是為了讓類圖更完整 引入的一個(gè)具體實(shí)現(xiàn)類 說(shuō)明抽象類 AbstractButtonRegister 是必須要有子類來(lái)繼承的 下面為其中的一些核心類做簡(jiǎn)要說(shuō)明 5 3 2 ButtonManager 類說(shuō)明類說(shuō)明 ButtonManager 類是整個(gè)按鈕管理的核心功能 他負(fù)責(zé)具體管理按鈕的行為 所有 的按鈕實(shí)例都由這個(gè)類來(lái)維護(hù) ButtonManager 類不需要開(kāi)發(fā)人員繼承 ButtonManager 還 標(biāo)題 第 27 18 頁(yè) 負(fù)責(zé)整個(gè)框架的事件響應(yīng)的處理 具體處理模式見(jiàn)后面 ButtonManager 類中集中了兩種模式 一種是按鈕狀態(tài)模式 一種是事件響應(yīng)模式 首先我們分析按鈕狀態(tài)模式 對(duì)外提供的添加按鈕方法有三個(gè) 方法名稱參數(shù)返回值描述 addButtonByID int btnID 按鈕 ID boolean 是否添加 成功 按照指定的 BtnID 加 入 Button 注意按鈕 加入的順序就是按鈕 顯示的順序 addChildButtonsByIDs int parBtnID 父 按鈕 ID int childBtnIDs 孩 子按鈕的 數(shù) 組 boolean 是否添加 成功 按照指定的 BtnID 和 指定的 BtnID 數(shù)組加 入一個(gè)按鈕的子按鈕 數(shù)組 finishButtons 停止加入按鈕 把現(xiàn) 在已經(jīng)加上的按鈕加 入 parUI 并顯示在 界面上 上述 個(gè)接口提供了在 ButtonManager 里添加按鈕的方法 下面三個(gè)接口提供了對(duì) 按鈕狀態(tài)的修改方法 在實(shí)現(xiàn)方面 按鈕的默認(rèn)狀態(tài)是可見(jiàn)而不可用 開(kāi)發(fā)時(shí)要注意這一 點(diǎn) 方法名稱參數(shù)返回值描述 setButtonState int iStateID 系 統(tǒng)注冊(cè)的狀態(tài) ID 設(shè)置按鈕的狀態(tài) 本 狀態(tài)必須為 StateRegister 類或 者子類里注冊(cè)的一種 狀態(tài) 設(shè)置完?duì)顟B(tài)之 后 ButtonManager 會(huì)自動(dòng)改變按鈕的狀 態(tài) setButtonEnabled int btnID 按鈕 ID boolean enbd 是 否可用 根據(jù)按紐 ID 設(shè)置按紐 是否可用 本方法直 接修改按鈕是否可用 和框架注冊(cè)狀態(tài)無(wú)關(guān) setButtonVisiable int btnID 按鈕 ID boolean vzab 是 否可見(jiàn) 根據(jù)按紐 ID 設(shè)置按紐 是否可見(jiàn) 本方法直 接修改按鈕是否可見(jiàn) 和框架注冊(cè)狀態(tài)無(wú)關(guān) 以上六個(gè)方法就是 ButtonManager 中對(duì)于按鈕狀態(tài)的接口 接下來(lái)描述一下事件響應(yīng)模式的接口 方法名稱參數(shù)返回值描述 registerCommandObject comKey 命令響應(yīng)對(duì)應(yīng)的 注冊(cè)一個(gè)命令 Key 和 一個(gè) Command 組成的 標(biāo)題 第 27 19 頁(yè) 主鍵 ICommand com 事 件響應(yīng)的接口實(shí) 例 值對(duì) 注意此注冊(cè)為 覆蓋式注冊(cè) 即后面 的注冊(cè)會(huì)覆蓋前面的 注冊(cè) registerCommand int btnID 按鈕 的對(duì)應(yīng) ID ICommand com 事 件響應(yīng)的接口實(shí) 例 本接口是為了方便按 鈕事件注冊(cè)而加入的 重載接口 注冊(cè)一個(gè) BtnID 和一個(gè) Command 組成的值對(duì) 注意此 注冊(cè)為覆蓋式注冊(cè) 即后面的注冊(cè)會(huì)覆蓋 前面的注冊(cè) executeCommandObject comKey 命令響應(yīng)對(duì)應(yīng)的 主鍵 根據(jù)命令 Key 來(lái)執(zhí)行 一個(gè)命令實(shí)例 如果 命令實(shí)例不存在 則 不做任何操作 executeCommand int btnID 事件 對(duì)應(yīng)的按鈕 ID 本接口是為了方便按 鈕事件而加入的重載 接口 根據(jù) btnID 來(lái) 執(zhí)行一個(gè)命令實(shí)例 如果命令實(shí)例不存在 則不做任何操作 以上四個(gè)接口構(gòu)成了事件注冊(cè)和事件執(zhí)行的體系 需要注意的一點(diǎn)就是 Icommand 接口的一個(gè)校驗(yàn)方法 boolean validate throws ValidationException 這個(gè)方法會(huì)在 executeCommand 方法中被調(diào)用 用來(lái)執(zhí)行與這個(gè)動(dòng)作相關(guān)的業(yè)務(wù)校驗(yàn) 如果校驗(yàn)不通過(guò) 那么會(huì)以異常的形式拋出校驗(yàn)出錯(cuò)的信息 5 3 3 AbstractBtnRgst 類說(shuō)明類說(shuō)明 AbstractBtnRgst 類是按鈕注冊(cè)管理類 AbstractBtnRgst 及其子類里里面注冊(cè)了 所有用到的按鈕 AbstractBtnRgst 注冊(cè)的是框架的默認(rèn)按鈕 AbstractBtnRgst 的一個(gè)具體實(shí)現(xiàn)子 類并不是對(duì)應(yīng)于一個(gè)功能節(jié)點(diǎn) 我們推薦的模式是每一個(gè)功能模塊對(duì)應(yīng)一個(gè) AbstractBtnRgst 具體實(shí)現(xiàn)子類 這樣就統(tǒng)一了模塊的按鈕注冊(cè) 而且也避免了整個(gè) HR 產(chǎn) 品所有按鈕注冊(cè)在一起導(dǎo)致文件過(guò)大的問(wèn)題 子類中 例如 AbstractBtnRgst 就是績(jī)效模 塊的具體實(shí)現(xiàn)類 注冊(cè)了本模塊需要的用到的所有自定義按鈕 按鈕分類掩碼 BTNMASK SYSTEM 0 x0 BTNMASK USER 0 xff 以上兩個(gè)常量決定了系統(tǒng)按鈕的數(shù)量不能超過(guò) 0 xff 也就是最多只能有 個(gè)系統(tǒng) 按鈕 AbstractBtnRgst 類中以常量的形式列出了所有的系統(tǒng)按鈕 常量名常量說(shuō)明備注 標(biāo)題 第 27 20 頁(yè) SYSBTN QUERY 系統(tǒng)預(yù)制查詢鈕 SYSBTN SAVE 系統(tǒng)預(yù)制保存按鈕 SYSBTN REFRESH 系統(tǒng)預(yù)制刷新按鈕 SYSBTN PRINT 系統(tǒng)預(yù)制打印按鈕 SYSBTN PRINTPREVIEW 系統(tǒng)預(yù)制打印預(yù)覽按鈕 SYSBTN ADD 系統(tǒng)預(yù)制增加按鈕 SYSBTN DELETE 系統(tǒng)預(yù)制刪除按鈕 SYSBTN EDIT 系統(tǒng)預(yù)制編輯按鈕 SYSBTN CANCEL 系統(tǒng)預(yù)置取消按鈕 SYSBTN RETURN 系統(tǒng)預(yù)置返回按鈕 SYSBTN ADD LINE 系統(tǒng)預(yù)置增行按鈕 SYSBTN DEL LINE 系統(tǒng)預(yù)置刪行按鈕 SYSBTN SUBOPERATION 系統(tǒng)預(yù)制子集操作按鈕 SYSBTN INSERT LINE 系統(tǒng)預(yù)制插入行按鈕 SYSBTN BATCH ADD 系統(tǒng)預(yù)制批量增加按鈕 SYSBTN BATCH EDIT 系統(tǒng)預(yù)制批量修改按鈕 SYSBTN COMMIT 系統(tǒng)預(yù)制提交按鈕 SYSBTN CALLBACK 系統(tǒng)預(yù)制收回按鈕 SYSBTN EXAMINE 系統(tǒng)預(yù)制審批按鈕 SYSBTN EXAMINE CHECK 系統(tǒng)預(yù)制審核按鈕 SYSBTN CANCELEXAMINE 系統(tǒng)預(yù)制棄審按鈕 SYSBTN EXAMINE SUGGESTION 系統(tǒng)預(yù)制審批意見(jiàn)按鈕 SYSBTN BROWSE 系統(tǒng)預(yù)制瀏覽按鈕 SYSBTN PATCH MANAGE 系統(tǒng)預(yù)制附件管理按鈕 SYSBTN IMPORT 系統(tǒng)預(yù)制導(dǎo)入按鈕 SYSBTN EXPORT 系統(tǒng)預(yù)制導(dǎo)出按鈕 SYSBTN SEAL 系統(tǒng)預(yù)制封存按鈕 SYSBTN CANCELSEAL 系統(tǒng)預(yù)制解封按鈕 SYSBTN FREEZE 系統(tǒng)預(yù)制凍結(jié)按鈕 SYSBTN CANCELFREEZE 系統(tǒng)預(yù)制解凍按鈕 SYSBTN PUBLISH 系統(tǒng)預(yù)制發(fā)布按鈕 SYSBTN CANCELPUBLISH 系統(tǒng)預(yù)制取消發(fā)布按鈕 SYSBTN DETAILS 系統(tǒng)預(yù)制明細(xì)按鈕 SYSBTN STAT 系統(tǒng)預(yù)制匯總按鈕 SYSBTN EDIT LINE 系統(tǒng)預(yù)置編輯行按鈕 對(duì)外提供一個(gè)靜態(tài)方法校驗(yàn)是否為合法的按鈕 public static boolean isContainBtnID int btnID 為了實(shí)現(xiàn)這個(gè)方法 需要在靜態(tài)塊中把注冊(cè)按鈕加入散列影射中 本部分略顯繁瑣 考慮使用統(tǒng)一的辦法加入常量注冊(cè) public final ButtonVO createSysBtnVOByID int btnID public abstract ButtonVO createUserBtnVOByID int btnID 兩個(gè)方法分別根據(jù)按鈕的 創(chuàng)建系統(tǒng)按鈕和用戶自定義按鈕的 ButtonVO CreateUserBtnVOByID 方法是需要在子類中重寫(xiě)的 createSysBtnVOByID 方法 是禁止子類覆蓋的 標(biāo)題 第 27 21 頁(yè) 5 3 4 ButtonStateRegister 類說(shuō)明類說(shuō)明 ButtonStateRegister 類注冊(cè)了每一個(gè)狀態(tài)下 ButtonManager 中所有按鈕的行為 包括可用性和可見(jiàn)性 注意按鈕在一個(gè)狀態(tài)下的默認(rèn)行為是可見(jiàn)而不可用 描述一個(gè)狀態(tài)下按鈕的行為 我們統(tǒng)一使用一個(gè) ButtonStateVO 來(lái)封裝 ButtonStateVO 結(jié)構(gòu)見(jiàn)下圖 ValueObject B Bu ut tt to on nS St ta at te eV VO O mergeVO void enableBtnIDs int stateData Object stateID int invisiableBtnIDs int enableBtnIDs 屬性指定此狀態(tài)下可用的按鈕 ID 數(shù)組 invisiableBtnIDs 屬性指定 此狀態(tài)下不可見(jiàn)的按鈕 ID 數(shù)組 StateID 就是狀態(tài) ID stateData 是預(yù)留給用戶的數(shù)據(jù)字 段 基本的實(shí)現(xiàn)機(jī)制是把上圖中的狀態(tài) 按照對(duì)應(yīng)的狀態(tài) 放在一個(gè)散列影射中 然后不同的對(duì)外提供根據(jù)狀態(tài) 得到狀態(tài) 的服務(wù) 對(duì)外的接口有 方法名稱參數(shù)返回值描述 getButtonStateVOByStateID int stateID 狀 態(tài) ID 本狀態(tài) 必須是狀態(tài)注冊(cè) 中已經(jīng)注冊(cè)的狀 態(tài) ButtonStateVO 根據(jù) StateID 得到 ButtonStateVO 實(shí)例 addStateVO int stateID 狀 態(tài) ButtonStateVO sVO 按鈕狀態(tài) VO 添加 StateVO 和 ID 的值對(duì) 如果 stateID 對(duì)應(yīng)的 ButtonStateVO 不為 空 并且在沒(méi)有屏蔽 系統(tǒng)默認(rèn)設(shè)置的狀態(tài) 那么將 stateID 對(duì)應(yīng) 的 ButtonStateVO 取 出 然后將這個(gè)對(duì) 應(yīng)的 ButtonStateVO 的 enableBtnIDs 及 invisiableBtnIDs 與 sVO 的 e

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論