Posted on 2006-07-15 22:25
canonical 閱讀(1664)
評論(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概念的一種誤讀.
?