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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    通過繼承構造業務對象環境

    Posted on 2005-12-06 22:33 canonical 閱讀(506) 評論(0)  編輯  收藏 所屬分類: 軟件開發
        現在很多設計中推崇接口和依賴注入(dependency injection),而不傾向于采用繼承機制來構造程序結構。但很多時候作為一種簡便而廉價的封裝方法,繼承仍然是不可或缺的. 例如與一些Engine打交道的時候,需要實現某些特定的接口. 在osworkflow中, 我們需要實現FunctionProvider接口,
         interface FunctionProvider{
            void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException;
         }
        在Quartz中需要實現Job接口
          interface Job{
              public void execute(JobExecutionContext context) throws JobExecutionException;
          }
        這些接口是一種技術性的要求, 它們表示了代碼生存所依賴的技術環境. 為了屏蔽這種對于外部引擎的依賴, 我們可以簡單的選擇實現一個基類,
        abstract class AbstractFunction implements FunctionProvider,Runnable{
            Map transientVars;
            Map args;
            PropertySet ps;

            public final void execute(Map transientVars, Map args, PropertySet ps){
                this.transientVars = transientVars;
                this.args = args;
                this.ps = ps;
                run();
            }

            public Object getPersistVar(String name){
               return ps.getAsActualType(name);
            }

            public void setPersistVar(String name, Object value){
               ps.setAsActualType(name,value);
            }

            public void removePersistVar(String name){
               ps.remove(name);
            }
        }
        在派生類中我們只要使用getPersistVar等函數就可以回避對于osworkflow特有的PropertySet類的依賴,而只在概念上需要一 個對象的持久化機制.當我們把業務代碼從osworkflow移植到其他工作流引擎的時候, 只需要改變一下基類即可.我們可以在基類中引入更加特殊的假 設,
        abstract AbstractBusinessFunction extends AbstractFunction{
            public BusinessObject getBusinessObject(){
                return transientVars.get("businessObject");
            }

            public void commonBusinessOp(){ ... }
        }

        AbstractBusinessFunction提供的可以是一個完整的業務對象環境, 我們在派生類中的所有代碼都可以是與業務直接相關的,而與具體 的技術實現無關(例如業務變量是存放在transientVars中還是存放在args中)

        class BusinessFunction extends AbstractBusinessFunction{
            public void run(){
                BusinessObject bo = getBusinessObject();
                bo.methodA();
                commonBusinessOp();
            }
        }
        對于我們來說實際有意義的是在派生類中所書寫的代碼,基類僅僅提供一個環境而已.無論我們使用Ioc注入業務變量還是從transientVars中主動 獲取業務變量,都是與我們的業務操作無關的. 實際上在理論上我們希望整個基類都可以是注入的(包括業務變量和業務操作),在泛型編程中這對應于所謂的 policy class.

    主站蜘蛛池模板: 在线观看亚洲网站| 亚洲最大福利视频| 中文字幕av免费专区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲国产精品无码久久久秋霞1| 最近的中文字幕大全免费8| 亚洲视频在线观看地址| h视频在线观看免费完整版| 91亚洲国产成人久久精品| 黄色片在线免费观看| 亚洲中文字幕无码av| 国产传媒在线观看视频免费观看| 国产精品久久亚洲一区二区| 亚洲 自拍 另类小说综合图区 | 亚洲成aⅴ人片在线影院八| xxxx日本免费| 色综合久久精品亚洲国产| 亚洲av成人一区二区三区在线观看| 一本久久免费视频| 国产亚洲精品精华液| 18禁黄网站禁片免费观看不卡| youjizz亚洲| 亚洲一区二区三区国产精品| 国产日韩AV免费无码一区二区| 亚洲精品在线电影| 国产成人一区二区三区免费视频| 国产精品青草视频免费播放| 亚洲日本国产乱码va在线观看| 女性自慰aⅴ片高清免费| 免费一级全黄少妇性色生活片 | 美女18一级毛片免费看| 亚洲日韩国产精品乱| 另类免费视频一区二区在线观看| 亚洲日韩乱码久久久久久| 小小影视日本动漫观看免费| 中文字幕免费在线观看动作大片| 91亚洲一区二区在线观看不卡| 国产精品另类激情久久久免费| 在线观看免费无码专区| 99亚偷拍自图区亚洲| 亚洲最大AV网站在线观看|