理解osworkflow 工作流
什么是工作流:
就是工作流程的計(jì)算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規(guī)則在計(jì)算機(jī)中以恰當(dāng)?shù)哪P瓦M(jìn)行表示并對(duì)其實(shí)施計(jì)算。工作流要解決的主要問(wèn)題是:為實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),在多個(gè)參與者之間,利用計(jì)算機(jī),按某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù)。
工作流的應(yīng)用場(chǎng)景:
soa中的時(shí)序編排,oa系統(tǒng)中的審批流轉(zhuǎn)。大部分管理流程中都可以用到工作流。
工作流與業(yè)務(wù)的關(guān)系
一、業(yè)務(wù)集成到工作流中:一種常見的做法是把所有的業(yè)務(wù)集成到工作流中,如果有個(gè)業(yè)務(wù)就定義個(gè)function,然后放進(jìn)去。例如要生成spcode。
1、帶來(lái)的好處:
業(yè)務(wù)與工作流完全集成,只需要找到工作流配置文件,以他為主線就能找到所有的業(yè)務(wù)。讓代碼的閱讀維護(hù)更方便。
2、壞處:
并不是最好的理念,仍然需要一次次的讀原來(lái)的代碼,復(fù)用性差,可剝離性差(比如我不想用工作流了),替換性差(比如我想從osworkflow到j(luò)bpm),侵入性高。跟現(xiàn)在大家說(shuō)的最多的soa沖突。
3、適用環(huán)境
小項(xiàng)目開發(fā),靈活,重寫難度不大
二、業(yè)務(wù)單獨(dú)寫,工作流后加入進(jìn)去
用非工作流的代碼實(shí)現(xiàn)所有的業(yè)務(wù),再用工作流編排
1、帶來(lái)的好處:
符合soa的原則,可以分組件,分服務(wù),分應(yīng)用,復(fù)用性好,一旦復(fù)用消耗小,并不需要了解內(nèi)部代碼。
2、壞處:
初期消耗大,業(yè)務(wù)劃分難度大,需要頻繁調(diào)整。
3、適用環(huán)境
越大型的項(xiàng)目越好,甚至可以在應(yīng)用之間組織。在電子系統(tǒng)集成中最有用。
工作流引擎:
字面意思理解,工作流引擎就是工作流核心元素解決方案。
那工作流的核心是什么呢?
有權(quán)限的操作者觸發(fā)流程在各種條件下的跳轉(zhuǎn)。
關(guān)鍵的是權(quán)限,條件,跳轉(zhuǎn)。
所以工作流引擎實(shí)現(xiàn)的就是:
根據(jù)角色、分工和條件的不同決定信息傳遞路由
使用工作流引擎帶來(lái)的便利:
1、開發(fā)簡(jiǎn)化
2、穩(wěn)定性
3、易維護(hù)
理解工作流:
一句話:其實(shí)軟件設(shè)計(jì)上更多的是借鑒非軟件知識(shí),比如設(shè)計(jì)模式來(lái)源于建筑。哲學(xué)上也有大同理論。
說(shuō)了好久的工作流,知道它的好處,知道它的壞處,知道應(yīng)用場(chǎng)景,但工作流還是有點(diǎn)朦朧,想到設(shè)計(jì)工作流,理解工作流還是有點(diǎn)頭疼。特別是在大的場(chǎng)景,比如說(shuō)我要實(shí)現(xiàn)任意方式定義的流程。聽到這個(gè)就頭大。那如何解決這個(gè)問(wèn)題呢?
越是這類問(wèn)題,約容易從理論的高度來(lái)解決。那么我們來(lái)看osworkflow是基于什么實(shí)現(xiàn)的?有限狀態(tài)機(jī)。當(dāng)我們放到宏觀,我們要解決所有問(wèn)題的時(shí)候會(huì)感覺很棘手,任意流程。但放到微觀呢。雖然我們最終是要解決整個(gè)的路由。但是我只要解決任意兩個(gè)step之間的路由。所有的路由就解決了。這也是數(shù)學(xué)上的歸納法。
好了現(xiàn)在的問(wèn)題已經(jīng)變成如何解決兩個(gè)step之間的路由了,從兩個(gè)step之間的路由,再次縮減到,我只需要知道一個(gè)step可以到什么地方,那我就知道是否兩個(gè)step之間存在路由。
那放到一個(gè)step上是否就是有限狀態(tài)機(jī)了呢?沒(méi)錯(cuò)。
step就是狀態(tài),action就是狀態(tài)轉(zhuǎn)換,但是osworkflow賦予了action太多的功能,變成了action中的result才是轉(zhuǎn)換,而action變成了轉(zhuǎn)換過(guò)程中一些列操作及轉(zhuǎn)換的集合。
有限狀態(tài)機(jī):
你熟悉他嗎,一定的,一定熟悉他,想想有多少程序是基于他實(shí)現(xiàn)的。比如rpg游戲中迷宮的任意路口,比如rpg游戲中的情節(jié)設(shè)定。如果你寫一個(gè)游戲引擎,你會(huì)發(fā)現(xiàn)fsm離你有多近。即使你不寫游戲引擎,你玩游戲嗎,在rpg中是否用筆通過(guò)一個(gè)個(gè)的點(diǎn)再現(xiàn)過(guò)迷宮地圖,是否通過(guò)一次次的通關(guān)找到各種隱藏情節(jié),這就是狀態(tài)機(jī)。
osworkflow的設(shè)計(jì)工具:
為什么osworkflow不提供設(shè)計(jì)工具呢,osworkflow開發(fā)者說(shuō),要靈活,這是程序員干的事情。但是uml本身也是程序員干的事情。再想想因?yàn)閛sworkflow基于有限狀態(tài)機(jī),而對(duì)于有限狀態(tài)機(jī)這種如果用uml表現(xiàn)出來(lái)是困難的??倳?huì)出一些難以控制的地方,再來(lái)看看jbpm,因?yàn)閖bpm是基于狀態(tài)圖的,來(lái)源于uml,所以更容易出設(shè)計(jì)工具。
個(gè)人理解,大家交流
posted on 2009-08-19 10:44 dreamstone 閱讀(1740) 評(píng)論(0) 編輯 收藏 所屬分類: 其它開源框架