隨筆 - 11, 文章 - 1, 評論 - 20, 引用 - 0
          數(shù)據(jù)加載中……

          結(jié)合WebWork實現(xiàn)高復(fù)用度系統(tǒng)的探索(上)

          需求: 某機構(gòu)體系下,機構(gòu)類型分為子公司,部門,人員等,以后可能在某機構(gòu)或者其子孫機構(gòu)下可能會再分出其他子機構(gòu)類型,希望在增加新類型過程中,盡可能的避免修改已有代碼。

          情況:子公司,部分,人員等已完成所有編碼(界面,商業(yè)邏輯,數(shù)據(jù)邏輯)
          變化:需要把這個機構(gòu)體系組成為一顆樹狀結(jié)構(gòu)
          策略:鑒于除了樹結(jié)構(gòu)外的其他部分代碼已經(jīng)完成,那么應(yīng)該首先保持這些代碼不予改動。復(fù)用修改的優(yōu)先級從高到低的順序如下:
          ? 界面×JSP,Action層
          ? 商業(yè)邏輯 Service層
          ? 數(shù)據(jù)邏輯層
          ? 數(shù)據(jù)物理層
          有經(jīng)驗的人知道,大部分情況下,越是下層的改動,越是影響越廣泛(注意不是修改難度),所以我們只有在無計可施的情況下,才進行低層的修改。

          分析: 回到我們的需求,從功能上看,維護一個組織機構(gòu)的需求,已經(jīng)涵蓋了每一個子結(jié)構(gòu)的維護需求,以部門的建立為例,在新建一個部門時,同時也必須建立機構(gòu)樹上的節(jié)點,
          ?這樣,如果需要直接使用原有的創(chuàng)建部門的所有代碼,需要在其上加上創(chuàng)建組織機構(gòu)所需要的父節(jié)點,以及當(dāng)前節(jié)點名稱信息(在這里department的增加界 面JSP是需要修改的,不過實際上我沒有修改該文件,而是利用DHTML來動態(tài)加入需要新增加的信息),然后提交給原創(chuàng)建部門的URI (departmentSave.action)和組織機構(gòu)創(chuàng)建URI(orgCreate.action),在這里我們利用ww提供的action chain功能來完成這兩個操作。
          ?這里需要修改department.action的配置,攔截save方法使其執(zhí)行完后跳過原來的relist結(jié)果頁面轉(zhuǎn)向組織結(jié)構(gòu)的創(chuàng)建orgCreate.action:
          ?<action name="unitSave" class="com.wolfsquare.ibase.org.action.UnitAction" method="save">
          ?? <result name="input">/org/unit/input.jsp</result>
          ?? <result name="relist" type="chain">
          ?????? <param name="actionName">orgCreate</param>
          ??????????????? <param name="namespace">/org</param>??
          ??????????? </result>
          ?? <result name="xxx" type="redirect">/org/unit.action?start=${start}</result>
          ?? <interceptor-ref name="validationStack"/>
          ? </action>
          可能有同學(xué)看到這里會問:創(chuàng)建組織節(jié)點時應(yīng)該還需要關(guān)聯(lián)前面創(chuàng)建的部門對象啊,這個操作是如何實現(xiàn)的?信息是如何傳遞的?
          在這里,由于整個架構(gòu)體系并沒有支持這種信息傳遞的功能,所以只好以一種比較”臟“的方式實現(xiàn):
          ??????? 在department.action類里增加了一個方法getModel()返回剛剛創(chuàng)建的部門對象,然后在org.action類中增加一個接收的方法setModel(object o)這樣在整action chain執(zhí)行的時候,ww會自動將getModel后的數(shù)據(jù)填入setModel中,這樣做的后果是以后增加新的機構(gòu)類型的功能時,action必須也照這樣的語意設(shè)置getModel方法。(如果要解決這個問題,這能需要使用一個特定的Context,然后攔截指定Service的創(chuàng)建方法,把創(chuàng)建結(jié)果放入Context,不過這又帶來如何清除Context的問題,于是又要求助與ww的interspector,專門寫一個攔截器來擦屁股,夠麻煩。。。)

          ??????? 就這樣,我們完成了新增,修改組織機構(gòu)的功能合成,雖然有點拖沓,但是還是達(dá)到了復(fù)用,少修改原有代碼,而且擴展性也很好的目標(biāo)。這上篇說的是兩個簡單業(yè)務(wù)的功能揉合問題,下篇我們來看看稍微復(fù)雜點的情況,看看還能不能繼續(xù)依葫蘆畫瓢來完成功能合的成
          ??
          (未完待續(xù))??

          posted on 2006-05-17 23:40 wolfsquare 閱讀(1223) 評論(0)  編輯  收藏 所屬分類: 企業(yè)應(yīng)用

          主站蜘蛛池模板: 康保县| 秦安县| 安丘市| 锦州市| 宁南县| 元氏县| 光泽县| 财经| 翼城县| 太谷县| 凤山市| 石棉县| 新野县| 库伦旗| 千阳县| 云霄县| 沙雅县| 于都县| 光泽县| 治多县| 罗源县| 凤凰县| 庄浪县| 栖霞市| 眉山市| 友谊县| 景德镇市| 塔河县| 弋阳县| 郧西县| 孝昌县| 聊城市| 衡阳县| 东平县| 开封县| 青阳县| 化隆| 榕江县| 武隆县| 古田县| 云和县|