Asktalk

          天行健,君子以自強(qiáng)不息!
          posts - 21, comments - 79, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理
           

          這是一個(gè)目前最好的一個(gè)開(kāi)源分頁(yè)標(biāo)簽的實(shí)現(xiàn)---extremeTable標(biāo)簽。今天談?wù)勊?/span>Limit的設(shè)計(jì)架構(gòu)思想。

          這個(gè)設(shè)計(jì)很通用,經(jīng)過(guò)作者的多次重構(gòu),現(xiàn)在extremeTable的架構(gòu)非常漂亮。這個(gè)標(biāo)簽現(xiàn)在缺點(diǎn)是有些參數(shù)對(duì)mvc控制器屏蔽了,應(yīng)提供一致的對(duì)外接口。不過(guò)整體上設(shè)計(jì)還是很精致的,面向?qū)ο髞?lái)處理 html元素,與spring非常的默契,非常便于開(kāi)發(fā)和測(cè)試。

          類(lèi)圖關(guān)系

          1, 工廠(chǎng)LimitFactory

          TableLimitFactoryAbstractLimitFactoryLimitFactory

          TableLimitFactory是最終實(shí)現(xiàn)的工廠(chǎng),它extendsAbstractLimitFactory抽象類(lèi),AbstractLimitFactory 類(lèi)implementsLimitFactory接口。

          TableLimitFactory主要是用來(lái)實(shí)例化,通過(guò)構(gòu)造函數(shù)傳入?yún)?shù)。同時(shí)創(chuàng)建Registry來(lái)完成jsp頁(yè)面參數(shù)傳入Registry。當(dāng)然還有一個(gè)功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對(duì)象。

          this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);

          AbstractLimitFactory主要是用來(lái)獲取jsp頁(yè)面上設(shè)置的參數(shù),比如分頁(yè)的信息(第幾頁(yè),起始行,結(jié)束行,每頁(yè)顯示行數(shù),查詢(xún)條件,排序條件等),當(dāng)然他是通過(guò)工具類(lèi)Registry來(lái)實(shí)現(xiàn)。

          2, Limit

          TableLimitLimit。其主要作用是一個(gè)參數(shù)參數(shù)器,就是把Registry對(duì)象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標(biāo)簽和action通信的橋梁。就像我們的j2ee項(xiàng)目vodaostrutsview等數(shù)據(jù)傳輸工具。

          3, Preferences

          TablePropertiesProperties 主要是來(lái)實(shí)現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。

          InputStream input = this.getClass().getResourceAsStream(preferencesLocation);

          if (input != null) {

          properties.load(input);

          }

          其中preferencesLocation是路徑,在TableLimitFactory初始化時(shí)候,通過(guò)工具類(lèi)TableModelUtils.getPreferencesLocation(context)獲取。

          這個(gè)設(shè)計(jì)也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。

          4, Registry

          LimitRegistryAbstractRegistryRegistry

          這個(gè)體系結(jié)構(gòu)和上面的工廠(chǎng)模式一樣,就是LimitRegistry主要是用來(lái)實(shí)例化,通過(guò)構(gòu)造函數(shù)傳入?yún)?shù)。AbstractRegistry是實(shí)際實(shí)現(xiàn)類(lèi),獲取jsp表單提交的參數(shù),并提供getter方法供Limit來(lái)使用。Registry是一個(gè)接口。

          所以這設(shè)計(jì)模式,我們可以來(lái)學(xué)習(xí),

          經(jīng)典表述:類(lèi)抽象類(lèi)接口

          類(lèi):初始化,定義構(gòu)造函數(shù),傳入?yún)?shù)。

          抽象類(lèi):定義業(yè)務(wù)方法在此。

          接口:定義接口方法,這個(gè)不用多說(shuō)。

          (作者:asktalk   來(lái)自 http://www.aygfsteel.com/askltak 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處)


          評(píng)論

          # re: 高性能分頁(yè)標(biāo)簽extremeTable的Limit設(shè)計(jì)架構(gòu)思想剖析  回復(fù)  更多評(píng)論   

          2007-12-26 21:22 by yeshucheng
          想問(wèn)問(wèn)哥們,你是用什么工具畫(huà)的類(lèi)圖。呵呵

          # re: 高性能分頁(yè)標(biāo)簽extremeTable的Limit設(shè)計(jì)架構(gòu)思想剖析  回復(fù)  更多評(píng)論   

          2007-12-27 00:40 by xmlspy
          @yeshucheng
          這個(gè)好像是myeclipse中uml功能

          其他eclipseuml插件也可以

          # re: 高性能分頁(yè)標(biāo)簽extremeTable的Limit設(shè)計(jì)架構(gòu)思想剖析  回復(fù)  更多評(píng)論   

          2007-12-27 01:46 by Asktalk
          是,MyEclipse的效果

          # re: 高性能分頁(yè)標(biāo)簽extremeTable的Limit設(shè)計(jì)架構(gòu)思想剖析  回復(fù)  更多評(píng)論   

          2007-12-27 11:55 by sunhy
          樓主,給個(gè)limit分頁(yè)的小例子吧,俺比較菜,呵呵,謝謝了

          # re: 高性能分頁(yè)標(biāo)簽extremeTable的Limit設(shè)計(jì)架構(gòu)思想剖析  回復(fù)  更多評(píng)論   

          2008-05-02 02:32 by Cccie
          應(yīng)該是用 rose 畫(huà)的

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 论坛| 汉沽区| 左贡县| 舞钢市| 柳河县| 定陶县| 西乡县| 新郑市| 万荣县| 东海县| 黎川县| 六安市| 石狮市| 灵台县| 千阳县| 曲靖市| 正镶白旗| 吉木萨尔县| 封丘县| 五河县| 四平市| 东台市| 成都市| 鲁甸县| 石柱| 梨树县| 富锦市| 玉山县| 增城市| 错那县| 乐山市| 汉川市| 烟台市| 镇江市| 佛山市| 莱芜市| 浑源县| 达尔| 临洮县| 旬阳县| 华宁县|