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

          BizFlow extends CRUD

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

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

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

          Feedback

          # re: BizFlow extends CRUD  回復  更多評論   

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

          # re: BizFlow extends CRUD  回復  更多評論   

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

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

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

            個人覺得設計應當分享具體的職責,這樣可以復用,同時隔離變化
            實體描述器(descriptor):對實體對象的一個描述,
            操作器(Operator):具體操作器的實現分為:creator, deletor, saveOrUpdator, updator等幾種實現。
            查詢器:實現對實體的簡單與復雜的關聯查詢?!?

            導航器:實現對實體的業務操作后,發生的具體跳轉。
          驗證器(Validator): 實現對業務數據的驗證
          權限認證器(Authencator):實現權限的判斷




           
            
            
            

          # re: BizFlow extends CRUD  回復  更多評論   

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

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

          bizflow是由biz object 驅動的流轉,而不是由步驟的先后順序驅動的流轉,所以它不是完整的工作流。

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

          對于事件機制不是設計而是描述。

          # re: BizFlow extends CRUD  回復  更多評論   

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

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

            但作為框架或組件的思想,遠遠不在于此,而在于可擴展。

          # re: BizFlow extends CRUD  回復  更多評論   

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

          operator的設計正在于它的可擴展性不夠.
          主站蜘蛛池模板: 云龙县| 茌平县| 永福县| 托克逊县| 陇川县| 林口县| 南昌县| 云林县| 临邑县| 枞阳县| 波密县| 明溪县| 轮台县| 衡南县| 乌拉特前旗| 镇赉县| 东宁县| 石河子市| 三明市| 莫力| 翼城县| 内江市| 五原县| 英吉沙县| 瓦房店市| 太保市| 乌拉特前旗| 惠东县| 兴安盟| 平南县| 冕宁县| 牟定县| 额敏县| 巨鹿县| 鄯善县| 三原县| 昌乐县| 南乐县| 鄂尔多斯市| 景东| 普定县|