大話工作流:什么是工作流(上)

人物設定:

小菜:具備基礎的計算機理論知識,剛畢業參加工作,從事Java開發,對技術很有熱情,凡事愛問個為什么,但是缺少項目實戰經驗,需要進一步培養。

老鳥:高級Java開發,在工作流方面有較多研究,在編程的過程中走過很多彎路,踩過很多坑之后,愿意把自己的經驗、教訓分享給大家。

小菜加入公司之后,就參與一個OA系統的請假業務的開發,業務場景如下:

請假人填報請假類型、請假天數、開始時間、請假原因后,根據請假天數,小于等于2天由本部門部門經理審批,大于2天由人事部門審批,審批拒絕后退回到填報人修改,通過后請假生效,在請假到期后,請假人及時在系統中辦理銷假。

請假流程示例

小菜拿到需求后,二話不說就開始寫代碼了,首先定義個請假實體

ID,userId(請假人),days(請假天數),startDate(開始時間),reason(請假原因),vacationType(請假類型)

然后編寫了請假申請的頁面,部門經理審批、人事部門審批,辦理銷假的頁面;一天過去了,小菜做得很有成就感,這樣明天再完善,測試一下就應該差不多了。

快到下班的時候,小菜很自信的通過svn提交了自己的代碼,看來今天不用加班了。這時老鳥從小菜身旁走過,問了下小菜今天的工作,小菜說今天做了個請假流程,定義了實體,編寫了頁面,完成基本的CURD操作,明天再努力一把,爭取做完。老鳥笑道:小伙子效率挺高的嗎,讓我看看你的代碼。小菜拿過自己電腦,熟練的打開了intellij,黑色的主題色立馬讓桌面顯得高達上。老鳥看著代碼,臉上的笑容慢慢收斂,眉頭緊鎖,程序員特有專注的表情在他臉上蔓延。旁邊的小菜也跟著認真緊張起來。

5分鐘后,老鳥轉向小菜,問道

  • 請假人能隨時修改請假信息嗎?比如我請假2天,請假審批通過后,我能改成10天嗎?
  • 怎么確定是由部門經理審批、還是人事部門審批?
  • 部門經理、人事部如何獲取待辦?
  • 審批人拒絕后請假人怎么修改?

一連串的問題,問的小菜有點不知所措,果然不愧是老鳥,一下子就問到問題的關鍵。小菜略微尷尬的回答:“這個問題我還沒想好,我打算明天邊做邊想,不過我……”。“你最好要改掉邊做邊想的毛病”,不等小菜說完,老鳥打斷了他,“編程需要抽象性思維、全局性思維,當你拿到一個需求或者碰到一個問題的時候,首先是要進行充分的思考,理解問題的本質,而不是倉促的動手,倉促編程的結果是設計缺少完整性和連貫性,后期會面臨大概率的返工,還有編程不是代碼越多越好,也不是越快越好,而是又快又好,編程就像寫作,不只是自己看懂,也要讓別人看懂,你的代碼還有很多可以精簡的地方”。小菜認真地聽著,很肯定地“嗯”了一聲,若有所思的點點頭,心里想到,要是拿到需求的時候能請教下老鳥就好了。

“你剛才說,不過什么”,老鳥接著問道。“不過我剛想到一個解決辦法,就是在請假實體上新增一個字段state,用于標識不同流程狀態,然后根據不同的狀態,限制表單是不是可以編輯”,說完,小菜拿起筆在紙上寫了起來。

0=草稿狀態;填報人可編輯,可提交
1=審批中;部門經理審批,填報人只讀
2=審批中;人事部門審批,填報人只讀
3=審批退回;填報人可編輯,可提交
4=審批結束;填報人只讀

小菜寫完后,看了看老鳥,他的表情不像先前那么嚴肅,仿佛示意他說下去,小菜接著說道:“在獲取待辦的時候,可以根據不同的狀態來識別是部門經理的待辦還是人事部門的待辦”,

“那填報人的銷假待辦呢,如果現在需求變了,大于2天小于10天的請假依然由人事部門審批,但是大于10天的請假人事部門審批后,還需要總經理審批,該如何處理?”老鳥問道。

大于10天總經理審批

小菜又陷入沉思,看著那張紙,突然靈光一閃,拿起來在原來的那張紙又畫了起來:

0=草稿狀態;填報人可編輯,可提交
10=審批中;部門經理審批,填報人只讀
20=審批中;人事部門審批,填報人只讀
30=審批中;總經理審批(大于10天),填報人只讀
40=審批退回;填報人可編輯,可提交
50=銷假;填報人銷假
60=審批結束;填報人只讀

“加大狀態碼之間的間隔,這樣隨時便于插入新的節點,可以應對流程的變化”,小菜自豪地說道。

“這確實是一種解決流程問題的思路,很多業務在相對固定的業務流程中使用狀態標識的方式來做流程,但是在一些流程頻繁變化的業務中,這樣的處理方法卻不合適,這里面會存在一些問題,你能說說嗎?”

剛才在紙上寫的時候,小菜已經意識到這樣做似乎有些不妥,正好借著這個問題,他說道:“最大的問題是,業務流程變化總導致代碼的修改,還有就是,多一個節點就要多做一個界面,界面相似,卻要通過Ctrl+C,Ctrl+V來操作”。

“重要的兩點都說對了,你說的核心關鍵字是解耦復用如何保證流程能夠隨需應變,面對需求的變化,盡量少地去修改代碼,通過業務和流程盡可能地解耦,來達到代碼盡量地復用,這是流程需要重點考慮的問題。”老鳥果然是老鳥,侃侃而談,專業術語一個個蹦出來。

業務表單在多個環節處理流轉,從而使得業務得到自動化處理,這就是工作流,其實類似的流程處理都可以用工作流來處理”,老鳥說道。

工作流?這個概念小菜還是第一次聽到,恨不得立馬百度一番,看看到底是個什么東西?

“交給你一個任務,晚上查查工作流的概念,建議用工作流把重新做一遍,會比現在要好多,我以前剛做類似業務的時候,和你一樣,也是用狀態標記業務狀態,到后來狀態越來越多,程序內部變得越來越臃腫,難以維護”,老鳥說著,仿佛從小菜的身上看到了當年的影子。

“但是我今天寫了一天,重寫的話怪可惜的,能不能把這個做完,后面如果有新的類似需求再用工作流”,小菜想著今天的任務要推到重來,有些不情愿地說道。

“作為一個剛入職的員工,想盡快地做出成果,完成工作任務固然重要,但作為一個程序員,必須要對自己要有嚴格的要求,要時刻想著有沒有更好的設計,有沒有更好的編碼實現,有沒有更好的算法提高系統性能,能不能通過自動化的工具來減少自己的重復工作,這些對程序員未來的發展很重要,所謂經驗,就是由不斷踩坑不斷填坑的過程,坑填多了,總結多了,下次碰到坑就能繞過去,經驗就漲了,如果只踩坑,不填坑,不總結就光漲工作年限,如果我現在告訴你前面有坑,你又什么要跳進去?,我見過很多程序員,有的工作了幾年,和畢業相比沒什么長進,有的短短一年就比有三年工作經驗的進步快,這正是對自我嚴格要求,對新技術保持足夠的熱枕,并勇于實踐。”老鳥語重心長地說道。

“好的,我晚上就看工作流”,停了老鳥一席話,小菜的戰斗力又回來。

老鳥看看了時間,不自覺已經和小菜談了一個多小時,收拾了下,和收獲滿滿的小菜下班了。

“要是拿到需求多問一下,多研究思考下,說不定今天的工作就不用白做了” 小菜想到。

下篇文章談談如果自己實現一個工作流,應該如何設計并實現。

向《大話設計模式》致敬。歡迎訪問我的網站
JavaCodehttp://code.admineap.com
AdminEAPhttp://www.admineap.com

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容

  • 很多人應該見到過這樣的會議,公司組織人力資源部門和各個部門進行績效考核,或者分解下個月的目標,劃分指標給各個部門。...
    Ctrlbox可卓閱讀 2,669評論 2 19
  • 前天從老家回天津的路上,就有朋友說要熬阿膠, 這個朋友剛生完孩子三個月,問我能不能吃阿膠,我說當然可以吃啊,母親的...
    請叫我陳姐閱讀 359評論 0 0
  • 戰爭之苦 祭河邊骨 洪流忠魂千堆雪,孤雁長鳴黃云際。殘燭閨閣粉桃花,歸夢楊柳依依時。殘...
    鏡花水月_3cc9閱讀 221評論 0 0
  • 記得曾經參加一個培訓活動,會議的組織者最后請來了一個身居黨派高位的領導人來分享他的工作經歷,這位領導一路上從一個普...
    紅袖飛揚閱讀 827評論 0 1
  • 裝飾器的作用是,對于有切面需求的場景,例如:調用函數的日志等,采用其他方式顯得繁瑣。而使用裝飾器可以美觀有快捷...
    Biniks閱讀 177評論 0 0