摘要:表現(xiàn)層的開發(fā)和維護(hù)一直是一件頭痛的事情,尤其是java這種手工編制的程序,本文主要講述一種表現(xiàn)層架構(gòu)的設(shè)計(jì)方式。
將UI的表現(xiàn)行為以及數(shù)據(jù)綁定行為封裝成UI組件,使其有良好復(fù)用性的概念提出已久,比如TagLib,。Net的server component.對(duì)于胖客戶端來說,也是一樣。出于今后技術(shù)升級(jí)的考慮,RAB應(yīng)該抽象UI組件接口,將具體組件接口的實(shí)現(xiàn)類的裝載行為封裝起來,通過配置文件聲明式的裝載。同時(shí)UI組件接口還應(yīng)封裝一些常用的表現(xiàn)行為及相關(guān)的屬性設(shè)置,如國際化資源設(shè)定,文本框輸入長(zhǎng)度等。
作為UI組件來說,它本身一種數(shù)據(jù)資源(這里統(tǒng)指業(yè)務(wù)數(shù)據(jù))的表現(xiàn)和入口。所以對(duì)于一個(gè)UI組件就是一個(gè)數(shù)據(jù)資源的表現(xiàn),而這些表現(xiàn)行為屬性就直接和數(shù)據(jù)資源對(duì)應(yīng),比如一個(gè)業(yè)務(wù)字段叫UserID,50個(gè)字符長(zhǎng),要求文本框顯示,并且要大寫,這些就是表現(xiàn)屬性。這就使得一個(gè)UI的視圖由會(huì)由許多數(shù)據(jù)字段決定產(chǎn)生。同時(shí)由于采用MVC的模式,View不會(huì)與包含任何的業(yè)務(wù)邏輯,所以可以將View上要顯示的所有數(shù)據(jù)字段全部放入一個(gè)配置載體表示UI的結(jié)構(gòu)。對(duì)于View的配置載體,xml提供了很好的形式,清楚的格式和層次,可以直觀的反映UI的布局層次。
對(duì)于大多數(shù)數(shù)據(jù)庫應(yīng)用系統(tǒng)而言,可以為數(shù)據(jù)庫中每個(gè)業(yè)務(wù)數(shù)據(jù)字段分配一套相關(guān)的UI表現(xiàn)行為的屬性,將其放入配置文件或者數(shù)據(jù)庫,每次系統(tǒng)啟動(dòng)之后加載這些屬性,并作緩存。在頁面裝載的時(shí)候,可以用一個(gè)外部裝載類解析xml進(jìn)行UI實(shí)例化,在圖2中這個(gè)裝載類就是GUIEngine.GUIEngine讀取xml中的字段標(biāo)簽,從緩存中讀取相應(yīng)的字段的表現(xiàn)型為屬性,根據(jù)這些屬性生成UI組件,然后添加至業(yè)面。完成頁面的裝載。這稱為用數(shù)據(jù)源模型直接與UI組件綁定的形式。
RAD主要表現(xiàn)是所見即所得。Web表現(xiàn)技術(shù)在做到這點(diǎn)上很不直觀,而胖客戶端的RAD開發(fā),早在Web之前就已經(jīng)非常成熟。不過本文在此提出了一種新的所見即所得的概念,那就是將這種方式不僅體現(xiàn)在開發(fā)中,還要體現(xiàn)在最終的成型產(chǎn)品中,也就是答應(yīng)客戶化定制UI的表現(xiàn)。這就要求框架提供UI的組件,要支持動(dòng)態(tài)拖拽的行為。
對(duì)于動(dòng)態(tài)的拖拽行為,本文認(rèn)為合理的方式應(yīng)采用包裝類方式,將動(dòng)態(tài)處理行為封裝在包裝類里面,當(dāng)UI組件實(shí)例往頁面添加的時(shí)候,將組件裝入包裝類。用戶進(jìn)行UI設(shè)計(jì)的時(shí)候,包裝類卸載UI組件原先所有的和動(dòng)態(tài)處理有關(guān)的事件,并且緩存這些事件對(duì)象,然后給UI組件裝在上動(dòng)態(tài)處理行為。
與傳統(tǒng)表現(xiàn)層技術(shù)相比:RAD的動(dòng)態(tài)性將UI的設(shè)計(jì)全部移交給用戶,而程序員,專注于實(shí)現(xiàn)業(yè)務(wù)細(xì)節(jié),并且給予用戶足夠的客戶化支持。而原先的方式,程序員不得不為UI的設(shè)計(jì)煞費(fèi)苦心。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注