<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

    Behaviour Dependency Injection

    Posted on 2006-10-22 18:44 canonical 閱讀(1262) 評論(0)  編輯  收藏 所屬分類: 設(shè)計理論
    ? IoC(Inversion of Control)是一個很寬泛的概念,對于我們常說的IoC容器(如spring)所做的工作,一個更加準確一些的說法是依賴注入(Dependency Injection), 即容器將一個對象所依賴的其他對象push到該對象中,而不是該對象從外界環(huán)境pull相關(guān)的依賴對象. 不過, 細究起來這種依賴注入仍然只是DI的一種特殊形式, 可以將它稱之為data dependency injection, 因為IoC容器所許諾的是: "啊哈, 當我們需要對象A的時候,它就在這兒". 雖然IoC容器管理的不僅僅是數(shù)據(jù),而是具有行為的對象,但是如果要讓這些行為具體發(fā)生, 我們?nèi)匀恍枰~外的調(diào)用步驟.
    ? 對于一個自動觸發(fā)behaviour的系統(tǒng), 我們一般將之稱之為引擎(Engine). 例如工作流引擎在處理完本步驟的業(yè)務(wù)邏輯之后會自動觸發(fā)流程流轉(zhuǎn)操作. 一個引擎對于我們的承諾是: "當我們需要某個behaviour的時候, OK, 它會在適當?shù)臅r候發(fā)生的". 對于一個軟件開發(fā)框架或者更宏大的軟件開發(fā)平臺而言, 如果我們以業(yè)務(wù)邏輯為主體來審視整個程序運行過程, 則它們的核心價值也在于在適當?shù)臅r候?qū)⑦m當?shù)牟僮鱅nject到業(yè)務(wù)邏輯中. 對于目前所謂的軟件開發(fā)平臺而言, 除了工作流的內(nèi)容之外, 一個主要部分就是CRUD(Create/Read/Update/Delete) Ready. 一個開發(fā)平臺的優(yōu)劣往往直接體現(xiàn)在它在多大程度上能夠?qū)RUD操作剝離出主體程序邏輯, 這不僅僅涉及到數(shù)據(jù)庫存取操作, 同時還包含界面交互, 數(shù)據(jù)邏輯關(guān)聯(lián)等.
    ? 除了引擎,框架,平臺等應(yīng)用層面的實現(xiàn)之外, AOP(Aspect Oriented Programming)在語言層面為behaviour注入也提供了一種特定的實施手段. 在AOP的概念中, 往往作為切點的函數(shù)被認為是基礎(chǔ)的部分, 而interceptor是在基礎(chǔ)藍圖上的一種擴展. 這也體現(xiàn)在基礎(chǔ)函數(shù)定義了當時執(zhí)行環(huán)境中可以訪問的狀態(tài)變量(參數(shù)/屬性),而interceptor則依附于pointcut處所能得到的狀態(tài)變量, 它本身一般并不維護獨立的狀態(tài)變量(不產(chǎn)生也不消滅狀態(tài)變量). 從數(shù)學(xué)上看, base function和interceptor之間構(gòu)成一種對偶(dual)關(guān)系, 當我們的關(guān)注重點轉(zhuǎn)移到interceptor上來之后, 它本身也應(yīng)該具有完整的業(yè)務(wù)語義, 這需要對AOP的執(zhí)行過程做小小的偏置處理.
    ? 在witrix平臺的BizFlow設(shè)計中,BizFlow是通過類似AOP的方法作為CRUD操作的Filter實現(xiàn)的, 但是從bizflow本身的配置文件來看,它可以構(gòu)成一個完整的業(yè)務(wù)描述, 而CRUD成為某種自動注入的behaviour.例如對于新增操作, BizFlow中的配置可以如下
    ? <action id="Add-default">
    ? </action>
    雖然沒有寫任何代碼, 新增操作(包括從request中讀取操作并做有效性校驗等操作)是自動進行的. 我們也可以在新增前和新增后分別執(zhí)行一些操作
    ? <action id="Add-default">
    ??? <source>
    ????? some operation before add
    ????? <biz:Proceed/>
    ????? some operation after add
    ??? </source>
    ? </action>
    與AOP中的常見做法不同, 這里并沒有明確定義新增前和新增后這樣的切點, 而只是定義了Add-default這樣一個action. 在BizAction的source段可以執(zhí)行任何tpl代碼, 而tpl代碼的執(zhí)行上下文可以看作一個Map, tpl代碼執(zhí)行過程中可以獲取變量, 也可以設(shè)置任意變量, 因而bizFlow擁有對于狀態(tài)空間的完全的控制權(quán).
    主站蜘蛛池模板: 182tv免费视视频线路一二三| 免费无码国产V片在线观看| 国产免费拔擦拔擦8X高清在线人| 亚洲AV无码成H人在线观看| mm1313亚洲国产精品无码试看| 免费看AV毛片一区二区三区| 国产精品亚洲综合天堂夜夜| 四虎影视在线永久免费观看| 免费精品久久久久久中文字幕| 国产成人精品曰本亚洲79ren| 二个人看的www免费视频| 亚洲Av无码精品色午夜| 1000部免费啪啪十八未年禁止观看| 亚洲成年人电影网站| 91精品视频免费| 亚洲国产精品无码久久九九大片| 国产一区二区三区在线免费| 黄人成a动漫片免费网站| 国外亚洲成AV人片在线观看| 精品亚洲永久免费精品 | 中文字幕在线亚洲精品| 成人性生交大片免费看中文| 91久久亚洲国产成人精品性色| 四虎在线免费视频| 亚洲AV无码国产剧情| 亚洲一区二区高清| 亚洲午夜免费视频| 亚洲AV噜噜一区二区三区| 亚洲毛片不卡av在线播放一区| 99re6在线视频精品免费下载| 亚洲日本国产综合高清| 亚洲不卡无码av中文字幕| 免费福利电影在线观看| 亚洲狠狠成人综合网| 在线观看亚洲天天一三视| 国产免费丝袜调教视频| 一个人看的免费观看日本视频www| 亚洲欧洲免费视频| 国产成人免费片在线视频观看| a级男女仿爱免费视频| 亚洲欧美国产日韩av野草社区|