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

          BizFlow extends CRUD

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

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

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

          Feedback

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

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

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

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

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

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

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

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




           
            
            
            

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

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

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

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

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

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

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

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

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

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

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

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

          operator的設(shè)計(jì)正在于它的可擴(kuò)展性不夠.
          主站蜘蛛池模板: 庆阳市| 兴山县| 新兴县| 德州市| 湛江市| 赤城县| 镇雄县| 郯城县| 潞西市| 金秀| 望都县| 临澧县| 台山市| 荆州市| 五华县| 阜阳市| 友谊县| 朔州市| 绥滨县| 武功县| 来凤县| 肥西县| 高尔夫| 丰都县| 镇赉县| 喀喇| 新泰市| 沛县| 四会市| 竹北市| 云龙县| 嘉定区| 名山县| 吉木乃县| 涟水县| 嵊州市| 郑州市| 浠水县| 天等县| 临沂市| 阳谷县|