自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

還在自己手寫請假流程嗎?Activiti7幫你快速請假!!!

開發(fā) 前端
本片博客的重點(diǎn)會放在「流程的講解」以及「Activiti7的一些重點(diǎn)功能」上.詳細(xì)的Activiti7教程會在之后的一篇博客里面詳細(xì)講解.主要還是我自己還沒有學(xué)完.

[[358500]]

前言

本片博客的重點(diǎn)會放在「流程的講解」以及「Activiti7的一些重點(diǎn)功能」上.詳細(xì)的Activiti7教程會在之后的一篇博客里面詳細(xì)講解.主要還是我自己還沒有學(xué)完.

流程

沒有規(guī)矩,不成方圓.

其實(shí)流程就相當(dāng)于我們在編寫功能時提前定好的規(guī)矩,我們一般編寫的功能都是按照甲方爸爸的要求編寫的,所以功能執(zhí)行的過程就應(yīng)該是按照甲方爸爸定義的流程來編寫的.那么我們就能理解流程的概念了.

理解完流程的概念之后,我們就需要了解一下我們一般是怎么執(zhí)行流程的呢?

一般的流程我們自己設(shè)計流程表,然后將我們的流程表與我們的業(yè)務(wù)數(shù)據(jù)進(jìn)行綁定,這樣我們的流程就能一步一步的進(jìn)行下去.我們通過一個請假的流程 來描述一下一般我們是怎么實(shí)現(xiàn)這個功能的:

可能一開始看上面的流程會覺得,這樣挺好的,一目了然,清清爽爽.說實(shí)話,我第一次也是這樣覺得呢,這不挺好的嘛.但是告訴你都是假象.

在上面的設(shè)計過程中我們不僅要管理我們的業(yè)務(wù)數(shù)據(jù),同時還要管理我們的任務(wù)數(shù)據(jù),并且各個任務(wù)數(shù)據(jù)可能還存在著一定的關(guān)聯(lián)關(guān)系,這種關(guān)聯(lián)關(guān)系我們肯定也要保留,否則我們怎么能確定,主管到底審核的是誰的請假申請!!!!!所以說就會明顯增加我們對于數(shù)據(jù)的管理壓力.

這樣的設(shè)計方式也不能說他是錯的,但是隨之時代的發(fā)展,勢必就會產(chǎn)生下面的局面:「部門越來越精細(xì)(就是他娘很多部門的意思),流程越來越復(fù)雜,處理的時間越來越長.....」

在這這樣的情況下,如果還是我們自己設(shè)計表,然后與我們的業(yè)務(wù)數(shù)據(jù)進(jìn)行綁定的話,那么顯然「不僅開發(fā)的難度會上升很多,同時在后期的維護(hù)難度上也會增加很多」.所以還是得通過流程框架來幫助我們更加高效的開發(fā)流程.

改動需求-->逼死程序員

說完流程的大體概念之后,我們來稍微了解一下為什么需要流程框架來幫助我們簡化流程的開發(fā).原因就那么幾點(diǎn),「一個就是開發(fā)的難度越來越大,流程越來越復(fù)雜,另外一個就是需求整天變個不停」.你想想你不用流程框架之前好不容易把一個流程寫完了,還沒兩天客戶說流程改了,你什么心態(tài)??

順便和大家講一下需求改了之后我們具體哪些地方使我們最頭疼的.

相信大家在開發(fā)的過程中最煩的就是需求一直在發(fā)生變化.因?yàn)樾枨笠坏┌l(fā)生改變,那么就會引起下面一連串的反應(yīng).正如下圖所示:

就是因?yàn)闀猩厦嬉幌盗械倪B鎖反應(yīng),所以后端開發(fā)人員一般都是在需求盡可能詳細(xì)的說明書出來之后才開始開發(fā)的.

因?yàn)橐坏┬枨蟀l(fā)生改變.那么下面的幾項(xiàng)基本上也是肯定需要發(fā)生改變的.

數(shù)據(jù)庫重構(gòu) 這個大家應(yīng)該都能明白.就算不明白,舉下面一個栗子.大家就懂了. 假設(shè)我們之前設(shè)計的一張關(guān)于用戶User的表是下面這樣的:

但是呢客戶現(xiàn)在提新的需求了,我們需要把用戶的詳細(xì)信息包括:電話號碼,家庭住址,學(xué)歷等等信息全部存儲下來,那么顯然我們數(shù)據(jù)庫中關(guān)于User這張表就需要重構(gòu).而且重構(gòu)會出現(xiàn)下面兩種情況: 1.「直接在原來的表上面添加字段.」2.「新建一張表,在該表上添加字段,之后再將兩張表關(guān)聯(lián)起來.」可能這時候會有人說了,第一種方案不是挺好的嘛,第二種方案不是鯊雕嗎!!還專門再建一張表關(guān)聯(lián)起來,真實(shí)有夠好笑的呢!!

其實(shí)并不是我鯊雕,這個其實(shí)是要看情況的,很明顯我們上面的樣例User表,可以直接在表上面添加字段就行了,但是如果是下面這張User表呢?

假設(shè)我們的表里面已經(jīng)有了30個甚至更多的字段之后,那么我們還能繼續(xù)添加字段嗎?顯然這樣做就很蠢,相當(dāng)蠢,非常蠢,確定一定以及肯定的蠢了. 因?yàn)?「一張表中的字段過多」 了之后就會嚴(yán)重影響我們關(guān)于數(shù)據(jù)庫「各項(xiàng)操作的性能」.所以我們只能選擇分表然后關(guān)聯(lián)的操作.這樣才能相對來說繼續(xù)維持我們數(shù)據(jù)庫相關(guān)操作的性能.

流程需要重新編寫 這個其實(shí)大家也能理解.我們還是舉一個栗子來幫助大家理解: 假設(shè)我們之前開發(fā)了一個功能是關(guān)于請假的. 假設(shè)我們之前的請假流程是這樣的:

但是需求改成這樣了:

那么顯然相應(yīng)的我們關(guān)于該請假流程的整個編寫過程就要發(fā)生改變.所以我們后端開發(fā)最最最最最討厭需求有重新發(fā)生了改變,這樣就使得我們整個的開發(fā)過程會異常的漫,并且有時候甚至?xí)霈F(xiàn) 「重構(gòu)的過程比推倒重新做花的時間還要長」.所以我們常常能夠看到什么「程序員與產(chǎn)品經(jīng)理打架的新聞」,這個也是正常的.

  • 模塊之間產(chǎn)生新的耦合關(guān)系 如果只是上面的還好,就怕客戶提了一個之前沒有提到過的模塊,如果這個模塊只是關(guān)聯(lián)到我們最開始的模塊或者是最后的模塊,其實(shí)都是還好的,就怕他提的功能模塊是卡在兩個模塊中間執(zhí)行的,這就要命了.不僅要和前一個模塊進(jìn)行綁定,同時又要與后一個模塊進(jìn)行綁定.兩頭為難. 這就好比某奇藝的騷操作,看網(wǎng)劇的時候好不容易等你熬過了開頭的廣告,之后好不容易看了半集電視劇了,他又給你整了個插播廣告,看完插播廣告你才能看下面半集電視劇,你說你氣不氣.圖片

Activiti7相當(dāng)方便快捷

講了那么多關(guān)于流程以及流程開發(fā)復(fù)雜的 東西,下面我們來簡單將一下Activiti7是如何幫我們實(shí)現(xiàn)的吧!

這里先簡單的講解一下,詳細(xì)的教程會在下一篇博客里面完整的分享出來.

首先第一點(diǎn),「關(guān)于流程的表都不需要我們在單獨(dú)設(shè)計創(chuàng)建,Activiti7會幫我們自動創(chuàng)建并且管理」 ,想想看,這是一件多么美好的事,基本上流程的所有問題全部都交給Activiti7就能完成.

第二點(diǎn)Activiti7大大的簡化了我們之前重復(fù)性的管理任務(wù)信息以及關(guān)聯(lián)的操作. 我們首先需要理解Activiti7的流程運(yùn)轉(zhuǎn)過程.我們可以通過下面的圖來進(jìn)行理解:

在Activiti7中是采用一開始就把操作的整個流程部署好,這樣每個用戶的操作就會按照這個流程走就行了. 那這樣我們按照這個順序來走一遍 我們先來繪制一張BPMN文件.

可以看到我們在BPMN文件中就已經(jīng)定義好了整個流程的運(yùn)轉(zhuǎn)過程,并且將流程中的操作細(xì)分成了相應(yīng)的「任務(wù)節(jié)點(diǎn)---(發(fā)起請假,審批請假)」,用戶每操作完一個動作,相應(yīng)的任務(wù)節(jié)點(diǎn)就完成,交付給下一個任務(wù)節(jié)點(diǎn),當(dāng)所有的任務(wù)節(jié)點(diǎn)都完成了以后這個流程就結(jié)束了.

這樣就使得我們不用在考慮如何存儲任務(wù)節(jié)點(diǎn)以及他們的關(guān)聯(lián)信息了,這些操作全部都交給 Activiti7來操作就行了.

之后我們就只需要將該流程定義部署起來:

  1. @Autowired 
  2.  private RepositoryService repositoryService; 
  3.  
  4.  //根據(jù)bpmn部署流程 
  5.  @Test 
  6.  public void initDeploymentBPMN(){ 
  7.      String filename="BPMN/Part4_Task.bpmn";//BPMN文件所在的位置 
  8.      Deployment deployment=repositoryService.createDeployment() 
  9.              .addClasspathResource(filename) 
  10.              .name("流程定義部署測試"
  11.              .deploy(); 
  12.      System.out.println(deployment.getName()+",部署成功"); 
  13.  } 

這樣我們的流程定義就部署成功了.

之后我們就需要去初始化該流程定義的一個流程實(shí)例:

  1. @Autowired 
  2.     private RuntimeService runtimeService; 
  3.  
  4.     //初始化流程實(shí)例 
  5.     @Test 
  6.     public void initProcessInstance(){ 
  7.  
  8.         ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_Task");//BPMN文件的Id名 
  9.         System.out.println("ID:"+processInstance.getId()); 
  10.         System.out.println("ProcessInstanceId:"+processInstance.getProcessInstanceId()); 
  11.         System.out.println("ProcessDefinitionId:"+processInstance.getProcessDefinitionId()); 
  12.     } 

這樣我們的流程實(shí)例就已經(jīng)創(chuàng)建完畢.之后我們就可以一步一步的執(zhí)行我們的流程實(shí)例中的任務(wù)節(jié)點(diǎn)了.

  1. @Autowired 
  2.     private TaskService taskService; 
  3.     //執(zhí)行任務(wù) 
  4.     @Test 
  5.     public void completeTask(){ 
  6.         taskService.complete("2d22f941-3f67-11eb-b3b6-3c58c24c1a1b");//任務(wù)節(jié)點(diǎn)的ID號 
  7.         System.out.println("該任務(wù)節(jié)點(diǎn)已經(jīng)處理完畢"); 
  8.     } 

這樣我們就可以完成我們的任務(wù)節(jié)點(diǎn),等到所有的任務(wù)節(jié)點(diǎn)都完成之后我們的流程就完成了.

是不是非常的方便快捷.

并且就算甲方爸爸修改了需求,我們只需要重新繪制我們的BPMN文件,之后在重新部署,再將我們相應(yīng)的完成任務(wù)節(jié)點(diǎn)的操作與我們的業(yè)務(wù)數(shù)據(jù)對應(yīng)即可.相當(dāng)快速.不用再像之前一樣了.

到這里一個簡單的請假流程就編寫號了,是不是相當(dāng)?shù)姆奖憧旖?!!!

本文轉(zhuǎn)載自微信公眾號「萌萌噠的瓤瓤」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系萌萌噠的瓤瓤公眾號。

 

責(zé)任編輯:武曉燕 來源: 萌萌噠的瓤瓤
相關(guān)推薦

2014-06-12 16:39:21

巴西世界杯請假

2019-08-14 16:56:38

Python職責(zé)模式請假

2010-09-02 15:34:32

喬布斯

2016-11-29 18:57:56

奧哲H3BPM

2022-02-28 08:11:30

gopsutil網(wǎng)絡(luò)進(jìn)程

2016-03-02 09:41:28

WiFi無源Wi-Fi

2017-09-25 09:17:52

美工程序員互聯(lián)網(wǎng)

2021-03-31 09:10:25

UI設(shè)計經(jīng)驗(yàn)

2010-03-09 08:55:03

Windows 7公式輸入

2020-11-17 07:43:24

互聯(lián)網(wǎng)MVC服務(wù)類

2011-03-22 10:06:46

lamp

2019-03-28 08:20:06

端口連通性網(wǎng)絡(luò)ping

2022-09-08 11:33:47

token釘釘打卡小工具

2023-09-13 07:00:54

2021-08-18 09:52:51

人工智能AI遠(yuǎn)程辦公

2021-11-24 07:47:06

安全

2015-10-22 14:44:04

Windows版本開發(fā)Windows 10

2020-09-29 12:13:46

SQL引擎底層

2015-06-02 16:48:30

達(dá)令

2011-06-15 13:20:56

QT Creator 升級
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號