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

          結合WebWork實現高復用度系統的探索(上)

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

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

          分析: 回到我們的需求,從功能上看,維護一個組織機構的需求,已經涵蓋了每一個子結構的維護需求,以部門的建立為例,在新建一個部門時,同時也必須建立機構樹上的節點,
          ?這樣,如果需要直接使用原有的創建部門的所有代碼,需要在其上加上創建組織機構所需要的父節點,以及當前節點名稱信息(在這里department的增加界 面JSP是需要修改的,不過實際上我沒有修改該文件,而是利用DHTML來動態加入需要新增加的信息),然后提交給原創建部門的URI (departmentSave.action)和組織機構創建URI(orgCreate.action),在這里我們利用ww提供的action chain功能來完成這兩個操作。
          ?這里需要修改department.action的配置,攔截save方法使其執行完后跳過原來的relist結果頁面轉向組織結構的創建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>
          可能有同學看到這里會問:創建組織節點時應該還需要關聯前面創建的部門對象啊,這個操作是如何實現的?信息是如何傳遞的?
          在這里,由于整個架構體系并沒有支持這種信息傳遞的功能,所以只好以一種比較”臟“的方式實現:
          ??????? 在department.action類里增加了一個方法getModel()返回剛剛創建的部門對象,然后在org.action類中增加一個接收的方法setModel(object o)這樣在整action chain執行的時候,ww會自動將getModel后的數據填入setModel中,這樣做的后果是以后增加新的機構類型的功能時,action必須也照這樣的語意設置getModel方法。(如果要解決這個問題,這能需要使用一個特定的Context,然后攔截指定Service的創建方法,把創建結果放入Context,不過這又帶來如何清除Context的問題,于是又要求助與ww的interspector,專門寫一個攔截器來擦屁股,夠麻煩。。。)

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

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

          主站蜘蛛池模板: 临城县| 平原县| 怀集县| 扶绥县| 廉江市| 娱乐| 广水市| 普定县| 阳朔县| 包头市| 鹿邑县| 馆陶县| 襄城县| 陆川县| 田林县| 内黄县| 县级市| 宜春市| 井冈山市| 尉氏县| 商河县| 黄骅市| 泊头市| 玛纳斯县| 思南县| 无锡市| 香河县| 隆子县| 安宁市| 毕节市| 安远县| 焉耆| 温宿县| 苍溪县| 绥芬河市| 陇南市| 尤溪县| 疏附县| 宣化县| 扶绥县| 泗水县|