背景
前段時間接手了一個還處于方案設計階段的作業,我重新做了設計,覺得新方案比舊方案業務清晰明朗、解決了舊方案的缺陷,我就很高興,跟同事聊這個事情,同事就問我是怎么想到這些的呢,
我說了一些細節的,但是沒有把核心本質講出來,我覺得這是個很難回答的問題,因為一個方案怎么更合適,主要因素包含業務理解、個人經驗、思維邏輯,這3個要素一般都是靠經年累月的積累才獲得的,從這些中提取出別人可以學習和使用的方法確實不是一會兒就能想出來的事情,
市面上可以看到的關于技術方案設計的經典的書都沒有仔細的去講這個問題,比如《人月神話》講的是專案大了怎么辦、《架構即未來》講的是架構擴展性的問題,那對于最普通的CURD(創建更新讀取洗掉)系統究竟怎么去設計,都是做CURD的,架構師和普通開發區別在哪里,本文就來探討一下這個問題,
CURD系統怎么做出技術含量
我前幾年在面試別人的時候,遇到過一些面試者,已經帶領別人做過專案了,可能人家的管理能力是不錯的,專案管理是個博大精深的學問,可能一個專案在不同的階段,更上層會找不同的管理者來做,
比如初創團隊,會找些善于創業、擅長打造敏捷團隊的管理者,這樣的管理者可能會比較善于鼓舞團隊士氣,而到了一定階段,專案業務量起來之后,不再求快,而是求穩,這時候管理者可能會換人,新的管理者做事并不那么快,但是做決策的路很正,路很正怎么理解,打個比方說:別人提了需求,前一個領匯入很好,人家來需求他就接,這個領導不是,他會分析利弊和領域、業務是否合適放在這里,再比如更一層領導提了一個需求,要求什么什么時間做完,這個領導會去分析上層領導更本質的需求,寧可延期,要做穩做好,而專案穩定之后,繼續穩定下去已經沒有什么業績了,這時候可能會再換領導,這個領導會帶來一些原來積累的規劃、方法,
總之,這個面試者可能有這些能力,但是我們要招聘一個技術人員,先考察硬實力,所以很自然的先請他介紹之前的專案做了什么和怎么做的,他自己也很沒底氣的說就是CURD嘛,給人感覺就是沒有想法,在作業程序中思考的少,
拿一個后臺管理系統來說,要對重要資料進行添加修改洗掉,一般需要審核、審計,敏感資料脫敏,甚至需要資料灰度,將這整套流程串聯起來,需要一個作業流系統,可能會用到作業流引擎,目前有些資料脫敏已經用上了NLP(自然語言處理)技術,這里面每一步都涉及知識點,
資料模型
有限狀態機設計
剛才提到后臺管理系統里用到審核、審計、灰度,這三個可以與業務流程分離,做成三個工具組件,審核有審核狀態:審核中、審核成功,審核失敗,灰度也有待灰度、灰度中、灰度成功、灰度失敗四種狀態,
假如有一條資料,目前它的狀態可以分成資料狀態:有效資料和無效資料,另外還有審核狀態和灰度狀態,這時候資料模型(可以簡單理解成資料庫的資料表設計)應該設計成三個狀態用三個資料欄位表示呢,還是用一個資料欄位來表示這三種狀態呢,
這要看情況,一般來說,如果三種狀態之前是相互獨立的,比如:審核中是否可以待灰度,也可能是灰度中?對于一個作業流系統來說,一般要先審核通過才會進行灰度流程,就是說各個狀態是互斥的,所以設計成三個欄位,程式的判斷邏輯會很復雜,因為有些組合是不成立的,這時候更合理的一個設計是用一個狀態欄位表示,通過狀態機流轉來控制,
設計方案中可以通過類似下面的流轉圖來體現:

實際方案設計程序中我改造了一下,狀態正常從左到右流轉,將終態用不同的形狀(這里用橢圓)來表示,這樣表示秩序感強些,更好理解,

資料表設計
在資料表設計時,要至少考慮資料型別、是否默認、是否為空和索引設計,比如對于錢什么的,需要用decimal(10,2),具體精確到多少位,要根據業務理解來定,對于加密字符什么的,加密如果是md5的,可以用char,而不用varchar來提高效率,
這里面就好像《紅樓夢》里的臺詞一樣,每條都很有學問,所以面試時的場景題也經常愛讓進行一個資料表設計,
流程設計
我比較建議在一個設計方案開始時先把設計流程圖先給出來,便于對方案有個整體認知,
流程圖也很有學問,【億圖】軟體上把流程圖分成了下面的子類,

我個人最常用的是泳道圖和BPMN,BPMN可以簡單理解為業務流程圖和泳道圖差別不大,就是在普通流程圖基礎上增加一個分類,這個分類可以是階段、也可以是執行者這些,就是給流程圖多增加一個維度的資訊,理解起來更清晰,

總結
在設計方案里還必須要有里程碑和未來規劃,有句廢話叫只怕有心人,在作業中,往往作業出色的并不是最聰明的,也不是花時間最長的,而是真正用心做的人,特別是設計方案,建議多用前人和大家總結的設計模板,模板最能代表一種設計思路,自己想到的、設計模板想到的都要考慮清楚,把方案做細,
遇到具體的問題,要做業界調研,之前聽過一個實習生做的方案,他說業界調研的時候并沒有查到特別相關的方案資料,當時我的領導就說了一句特別值得思考的話:如果沒有查到,肯定是你的檢索關鍵詞不對,
我后來反復斟酌這句話,發現能想到的檢索關鍵詞才是真正體現自己對業務理解的,同時,業界調研的時候不僅要對業務相關做調研,需求可以分解,具體到每個步驟也需要調研,調研程序是個極好的學習機會,
下功夫和不下功夫的區別,想想《紅樓夢》,之所以這么多紅學者,人家紅樓夢的作者設計每句話都是劇透,人物說出的話,都會被啪啪打臉,里面的每道菜譜都是值得專業廚師來研究的,這都是心用到了,優秀架構師也是這樣煉成的,之所以說這個廢話,因為我就被diss過方案做的不夠細,我也看過別人的方案不夠細的,時常回想被diss不夠細的那句話,覺得真的是金玉良言,心懷感激,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/226017.html
標籤:其他
