<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

    情況:子公司,部分,人員等已完成所有編碼(界面,商業(yè)邏輯,數(shù)據(jù)邏輯)
    變化:需要把這個機(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)驗(yàn)的人知道,大部分情況下,越是下層的改動,越是影響越廣泛(注意不是修改難度),所以我們只有在無計(jì)可施的情況下,才進(jìn)行低層的修改。

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

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

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

    主站蜘蛛池模板: 亚洲自偷自拍另类图片二区| 精品国产日韩亚洲一区| 亚洲国产精品久久久久网站 | 在线亚洲午夜片AV大片| 亚洲三级在线免费观看| 亚洲国产精品乱码在线观看97| 一级毛片免费观看不卡的| 亚洲人成电影亚洲人成9999网| 99爱在线观看免费完整版| 亚洲综合综合在线| 啦啦啦高清视频在线观看免费| 久久亚洲国产成人影院| 国产精品四虎在线观看免费 | 亚洲国产精品国自产拍电影| 午夜不卡久久精品无码免费| 久久久久久久亚洲Av无码| 日韩精品无码区免费专区 | 亚洲一区二区三区91| 无限动漫网在线观看免费| 亚洲精品无码成人片久久不卡| 国产一区二区免费在线| 一区二区三区免费视频观看 | 成视频年人黄网站免费视频| 亚洲午夜精品久久久久久app| 国产午夜无码视频免费网站| ssswww日本免费网站片| 亚洲综合国产精品| 在线观看免费大黄网站| fc2免费人成在线| 亚洲妇女水蜜桃av网网站| 国产在线观看免费完整版中文版 | 亚洲爆乳少妇无码激情| 激情97综合亚洲色婷婷五| 99在线热视频只有精品免费| 在线aⅴ亚洲中文字幕| 伊人婷婷综合缴情亚洲五月| 四虎永久在线观看免费网站网址| 久久久久久久久无码精品亚洲日韩| 国产精品亚洲成在人线| 久久精品a一国产成人免费网站| 一个人看的www视频免费在线观看|