## **來吧:PHP工作流引擎詳解**

>[success] ### **什么是工作流引擎(Workflow Engine )**
開發一個系統,最關鍵的部分不是系統的界面,也不是和數據庫之間的信息交換,而是如何根據業務邏輯開發出符合實際需要的程序邏輯并確保其穩定性、易維護性(模塊化和結構化)和彈性(容易根據實際業務邏輯的變化作出程序上的變動,例如**決策權的改變、組織結構的變動**和由于業務方向的變化產生的全新業務**邏輯**等等)。 Workflow 引擎解決的就是這個問題:如果應用程序缺乏強大的邏輯層,勢必變得容易出錯。
就好比一輛汽車,外表做得再漂亮,如果發動機有問題就只是一個擺設。應用系統的彈性就好比引擎轉速方面的性能,加速到100 公里需要1 個小時(業務流程發生變動需要進行半年的程序修改)還能叫好車嗎?引擎動不動就熄火(程序因為邏輯的問題陷入死循環)的車還敢開嗎?(來源于百度百科)
>[success] ### **為什么要用工作流引擎?**
為了解釋這個問題,我們來舉個例子:
**應用場景:** 張三工程師正在研發一套OA、ERP等企業信息管理平臺
**客戶需求:** 有個物資系統,客戶希望這么做,A填寫申請表——B部門經理審核——C物資管理部確認——D張三領用物資
**張三工程師:** 立刻開始了業務需求調研,分析,總結。然后開始寫代碼了。業務表單很簡單(這里我們就忽略了)
審批設計:-1 退回修改 0 保存編輯 1部門經理審核 2 物資部門確認 is\_use 是否領用
根據設計:寫了如下代碼:
```
public function check(){
$code = input('code');
$userId = session('uid');
switch?($code){
case?1:?//B核準
//一大堆邏輯代碼
break;
case?2:?//c物資部核準`
//一大堆邏輯代碼
break;
default: //張三發起申請
//一大堆邏輯代碼
}?
}
}
```

這時候,張三工程師,很快寫完了代碼。邏輯也正確,權限判斷完全沒問題,很高興的跟客戶開始了一系列的騷操作,并審核通過。
**時間過了半個月,軟件還在運維應用期間。客戶給張三工程師打電話,我們領導說,要增加一個審核功能,改為:A填寫申請表——B部門經理審核——E主任核實——C物資管理部確認——D張三領用物資**
**問題來了:** 而這個客戶系統,有數十條,類似的審核業務?如果都這樣變動?
>[danger] **這時候,求張三工程師的心里陰影面積?**
**總結下:** 從上面的例子來說,不能說張三工程師的代碼邏輯有問題,業務邏輯有問題。但是問題在哪里? 我個人認為,在于沒有很好處理業務與邏輯之間的關鍵因素。我們常說,信息管理系統業務是一半,工作流程是一半。如何整合好這兩個關系。需要應用到工作流引擎。
## 廢話太多,來點實際~
>[success] ### **用工作流解決上面張三工程師的問題**
**李四接手了,張三的業務,全面分析了,下系統。決定開發個專門管理該公司的業務流程問題。 把業務與流程剝離。最后選擇了Tpflow工作流引擎。**
**通過可視化快速構建。在2分鐘就完成了上面的邏輯架構,同樣的,改造了數十條業務邏輯。而這些,他只用了不到1個小時。**
****
>[danger] **張三工程師,不可思議的說,原來還有工作流這東西~~~**
********
>[success] ## 總結來了
### 通過上面的小Demo應該很容易看出工作流強大的優勢在于哪里。不管你業務怎么變化,流程怎么變化,都能通過可視化的拖拽設計,把專業的流程驅動交給專業的流程引擎,歸集與統一。**你省去的不僅僅是流程的調研,客戶需求分析時間,更是你寫if else 一大堆重復代碼的時間**。
>[success] PHP開源工作流軟件推薦
### 目前PHP開源的工作流引擎算是比較少的,可商用的就更少了,推薦兩個行業比較優秀的工作流引擎.
* ### **Tpflow** 可視化設計、開源中國GVP項目、5年迭代更新、開源免費使用 [鏈接](http://tpflow.cojz8.com)
* ### **PHPworkflow** 開源免費使用
如需Tpflow可詳見:Thinkphp官方市場: [鏈接](https://market.topthink.com/product/244)
****

