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).