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

          BizFlow extends CRUD

          Posted on 2006-07-15 22:25 canonical 閱讀(1671) 評論(5)  編輯  收藏 所屬分類: Witrix開發(fā)平臺

          ? CRUD(Create Read Update Delete)是一般應(yīng)用程序中最基礎(chǔ)的操作,但是用戶的需求卻很難直接映射到CRUD操作上。例如常見的需求如下:
          ?1. 不同的業(yè)務(wù)處理處于不同狀態(tài)的業(yè)務(wù)對象:
          ???? 業(yè)務(wù)A處理狀態(tài)為X的業(yè)務(wù)對象,而業(yè)務(wù)B處理狀態(tài)為Y的業(yè)務(wù)對象
          ?2. 業(yè)務(wù)對象處于不同狀態(tài)的時候允許的操作不同:
          ??? 狀態(tài)處于X的業(yè)務(wù)對象允許操作U, 而狀態(tài)處于Y的業(yè)務(wù)對象允許操作V
          ?3. 不同的業(yè)務(wù)操作可能修改業(yè)務(wù)對象的不同屬性:
          ???? 操作U修改業(yè)務(wù)對象的屬性P, 操作V修改業(yè)務(wù)對象的屬性Q
          ?4. 具有不同權(quán)限的人能夠從事的業(yè)務(wù)不同:
          ????? 角色R處理業(yè)務(wù)A, 角色S處理業(yè)務(wù)B
          ?5. 具有不同權(quán)限的人即使從事同一業(yè)務(wù),所能夠操作的業(yè)務(wù)對象集合也不同:
          ???? 角色R處理部門M的業(yè)務(wù)對象,角色S處理部門N的業(yè)務(wù)對象.
          ?6. 具有不同權(quán)限的人即使可以操作同一業(yè)務(wù)對象,所能夠采取的業(yè)務(wù)操作也不同:
          ????? 角色R只能進(jìn)行操作U, 角色S只能進(jìn)行操作V
          ?7. 在業(yè)務(wù)對象上執(zhí)行操作之后可能造成狀態(tài)變遷:
          ????? 處于狀態(tài)X的業(yè)務(wù)對象上執(zhí)行操作U后狀態(tài)變?yōu)閅

          以上這些需求往往是系統(tǒng)中最易變的部分, 而它們在概念上恰恰表現(xiàn)為對CRUD的一種限制性描述. 因此通過如下擴(kuò)展我們可以定義BizFlow的概念: BizFlow = CRUD + Filter. 根據(jù)這種觀念, witrix平臺中BizFlow被實現(xiàn)為DaoWebAction的一種無縫擴(kuò)展.
          ?? 在jsplet框架中我們通過如下url模式來訪問后臺的CRUD操作:
          ?? /list.jsp?objectName=MyObj&objectEvent=Query
          為了實現(xiàn)BizFlow只需通過spring為DaoWebAction配置一個xml配置文件, 此后仍然可以通過
          ??? /list.jsp?objectName=MyObj&objectEvent=Query
          來訪問后臺的CRUD操作,只是后臺會自動應(yīng)用配置文件中的 bizId="default", bizActionId="Query-default"等配置項.
          如果我們采用如下url來訪問
          ??? /list.jsp?objectName=MyObj&objectEvent=Query&$bizId=test&$bizActionId=test???
          則后臺將應(yīng)用配置項 bizId=manage, bizActionId=Query-test, 而
          ??? /list.jsp?objectName=MyObj&objectEvent=BizAction&$bizId=test&$bizActionId=test???
          則對應(yīng)于配置項 bizId=manage, bizActionId=BizAction-test.
          ?? 應(yīng)用BizFlow配置項之后,所有前臺代碼都可以不做出任何改變, 因為它們只是對于給定數(shù)據(jù)的展現(xiàn).
          ??
          ?? BizFlow可以看作是CRUD加上簡單的流程控制和權(quán)限控制所構(gòu)成, 但是它與完整的工作流模型還是有著顯著區(qū)別的. 工作流中所關(guān)注的重點(diǎn)首先是流程實例而不是業(yè)務(wù)對象實例, 在一個流程中是否存在唯一的業(yè)務(wù)對象,以及業(yè)務(wù)對象的狀態(tài)是否隨著流程流轉(zhuǎn)發(fā)生變化完全是一件獨(dú)立的事情,它們并不屬于抽象的工作流模型本身. 理論上說,一個業(yè)務(wù)對象可以同時參與多個流程. 在工作流建模中主要通過流程步驟的先后順序的約束來描述業(yè)務(wù)進(jìn)程, 處于同一狀態(tài)的業(yè)務(wù)對象可能處在不同的流程步驟中. 而BizFlow可以看作是狀態(tài)驅(qū)動的, 當(dāng)前業(yè)務(wù)步驟直接由業(yè)務(wù)對象的狀態(tài)決定. 在BizFlow中因為視角是業(yè)務(wù)對象的狀態(tài),因此我們直接面對的是大量處于同一狀態(tài)的不同的業(yè)務(wù)處理過程, 而workflow中往往建模的時候強(qiáng)調(diào)單流程實例視角,而一般缺乏對于流程實例相關(guān)性的描述. 現(xiàn)在國內(nèi)很多人認(rèn)為工作流就是狀態(tài)機(jī)其實是對workflow概念的一種誤讀.
          ?

          Feedback

          # re: BizFlow extends CRUD  回復(fù)  更多評論   

          2006-07-17 09:35 by ronghao
          很感興趣,我前段時間的想法和這個比較象,只是放到業(yè)務(wù)層攔截而已.這個不會是你的一個產(chǎn)品吧?

          # re: BizFlow extends CRUD  回復(fù)  更多評論   

          2006-08-07 23:05 by OneEyeWolf
            你這個東東,其實和workflow是沾不上邊的,不知道為什么叫BizFlow.你所描述的業(yè)務(wù)狀態(tài)的變化是雜亂的,視具體業(yè)務(wù)對象屬性和商業(yè)邏輯操作而定,一般很難設(shè)計出驅(qū)動對象發(fā)生狀態(tài)變化的事件機(jī)制。所以叫BizFlow明顯的讓人誤解。
            如果你和workflow勉強(qiáng)的相比,可能會讓你的思路受到影響。

            你上述對業(yè)務(wù)對象的7條分析,并沒有帶出你下一步是如何設(shè)計來應(yīng)對這些變化與操作的,看不出具體的思路所在。

            實際項目復(fù)雜的操作并不能分析出這幾條而到此為止,要想滿足這7條,估計是非常困難的。估計你的只能滿足你特定領(lǐng)域的一些簡單的操作。

            個人覺得設(shè)計應(yīng)當(dāng)分享具體的職責(zé),這樣可以復(fù)用,同時隔離變化
            實體描述器(descriptor):對實體對象的一個描述,
            操作器(Operator):具體操作器的實現(xiàn)分為:creator, deletor, saveOrUpdator, updator等幾種實現(xiàn)。
            查詢器:實現(xiàn)對實體的簡單與復(fù)雜的關(guān)聯(lián)查詢。 

            導(dǎo)航器:實現(xiàn)對實體的業(yè)務(wù)操作后,發(fā)生的具體跳轉(zhuǎn)。
          驗證器(Validator): 實現(xiàn)對業(yè)務(wù)數(shù)據(jù)的驗證
          權(quán)限認(rèn)證器(Authencator):實現(xiàn)權(quán)限的判斷




           
            
            
            

          # re: BizFlow extends CRUD  回復(fù)  更多評論   

          2006-08-07 23:21 by canonical
          @OneEyeWolf
          具體實現(xiàn)的策略就是 CRUD + Filter, 我已經(jīng)寫得非常清楚.

          我們的bizflow實現(xiàn)是基于tpl技術(shù)的,而不是使用operator的概念, 那樣太受局限了。

          bizflow是由biz object 驅(qū)動的流轉(zhuǎn),而不是由步驟的先后順序驅(qū)動的流轉(zhuǎn),所以它不是完整的工作流。

          簡單的bizflow可以滿足眾多不需要分支的流轉(zhuǎn)需求,這已經(jīng)足夠做一些有意義的事情。

          對于事件機(jī)制不是設(shè)計而是描述。

          # re: BizFlow extends CRUD  回復(fù)  更多評論   

          2006-08-07 23:32 by OneEyeWolf
          基于接口定義不代表就不能基于TPL,如果你的東東做放出來做為組件的話,就必須留有可擴(kuò)展的余地。
            你也很清楚,只有配置文件,并不能解決所有的問題。

            雖然你的思路是對的,作為應(yīng)用只需要二、八開就足夠了,即只需要滿足80%的需求,就已經(jīng)大大降低了開發(fā)人員的工作量。

            但作為框架或組件的思想,遠(yuǎn)遠(yuǎn)不在于此,而在于可擴(kuò)展。

          # re: BizFlow extends CRUD  回復(fù)  更多評論   

          2006-08-07 23:43 by canonical
          @OneEyeWolf
          如果你有興趣, 應(yīng)該讀一讀我其他的文章, 以搞清楚我在說些什么.
          http://canonical.blogdriver.com/canonical/961298.html

          operator的設(shè)計正在于它的可擴(kuò)展性不夠.
          主站蜘蛛池模板: 正蓝旗| 浙江省| 江阴市| 哈密市| 恭城| 铜川市| 云梦县| 西贡区| 康平县| 闵行区| 洪雅县| 清原| 莱阳市| 安远县| 大丰市| 永顺县| 古丈县| 正阳县| 平和县| 玉环县| 锡林郭勒盟| 普定县| 益阳市| 马龙县| 信阳市| 黄梅县| 湖口县| 无锡市| 昌吉市| 马尔康县| 兴海县| 河源市| 镇赉县| 天等县| 赤峰市| 富顺县| 汉阴县| 定襄县| 诸暨市| 邹平县| 固原市|