CURD系統怎麼做出技術含量驚艷面試官
在《CURD系統怎麼做出技術含量–怎樣引導面試》有朋友開玩笑說都用上了領域驅動了,就不叫CURD系統了吧。這裡我解釋一下,怕大家對DDD領域驅動設計有什麼誤解。
DDD是為解決軟件複雜性而生,但不僅僅可以被用於複雜的系統。它裏面提到了很多技巧,其實CURD就是其中一種技巧。這些技巧適用於任何系統,哪怕是非常小型的系統,比如《CURD系統怎麼做出技術含量–怎樣引導面試》里提到的謙卑對象模型、充血模型。
今天咱們再提高一下CURD系統的門檻,連DDD技巧,咱也不用。就用寫咱們平時都在寫的最簡單的接口。能說明設計理念,也能驚艷到面試官:
-
兩種設計方法
-
n+m返回值設計
-
終態設計
-
一種思維理念
-
誰生產誰負責
兩種設計方法
一個規範的系統要統一的入參標準和返回值標準,這種標準可以提高系統的穩定性,促進跨部門甚至跨公司之間更好的合作,價值很高。面試的時候值得跟面試官說一說。很多可能之前大家都做了,但是沒有仔細思考其中的邏輯,你思考清楚了也會讓面試官眼前一亮。
n+m返回值設計
一個接口入參有n個值,需要的返回值是m個值。在返回值中可以把入參和返回值一起返回。
這種設計便於追蹤和排查問題:
為了防止調用方沒有日誌追蹤號、打印日誌過多等原因造成不方便跟蹤請求的問題,可以設計返回值將入參一起打印。這樣調用方可以通過一條日誌方便的獲取到入參和返回值。線上排查問題會非常方便。
假設有個場景,調用方的系統設計不方便請求追蹤,比如沒有線程追蹤號。在高並發量場景下可能日誌是這樣的:
1、thread-1|ClassName|參數1:11,參數2:11
2、thread-2|ClassName|參數1:22,參數2:22
3、thread-1|ClassName|參數1:33,參數2:33
4、thread-2|ClassName|返回值:44
5、thread-1|ClassName|返回值:55
6、thread-1|ClassName|返回值:66
你能決定55和66對應的誰是1,誰是3的返回值嗎?
但是如果返回值包含了入參,就好辦多了,舉個返回值例子:
thread-1|ClassName|{參數1:11,參數2:11,返回值:55}
這樣就一目了然。有的時候可能是調用方本身的設計問題,但是如果被調用方能通過巧妙的設計幫助調用方。一旦遇到問題,調用方可以自己先進行排查,不用馬上聯繫被調用方幫忙。即節約了自身的成本,又體現了專業性,何樂不為。
終態設計
在《實戰並發-使用分佈式緩存和有限狀態機》里我講過有限狀態自動機。有限狀態機涉及狀態流轉。狀態從分類上可以分成三種:初始狀態、中間狀態和終態。這段時間不是一直在將TCP底層通信嘛,來一張TCP狀態的流轉圖體會一下:
有限狀態機的重點在於有限,要有起點和終點。也就是一定要有終態。在《穩定性三十六計-超時處理》我講過:
在傳統的單機系統中,調用一個函數,要麼返回成功,要麼返回失敗。這就是兩態系統(2-state system)。
在分佈式系統中,由於系統是分佈在不同機器上的。還可能有一種狀態叫:超時。成功、失敗和超時是分佈式系統調用的三態。
超時不是終態,而是一種中間狀態:最終有可能下游是成功了,也有可能是失敗了。這時候我們需要在超時之後推定一種狀態,推定成功或者失敗。究竟是成功還是失敗因功能而已。
比如付款操作,不知道是否成功就推定是成功的,那用戶可能沒有付款就拿到了商品或者享受了服務。商家就會資金損失。所以一般會推定失敗。讓用戶再次支付。最終通過查詢或者對賬發現用戶實際是支付成功的,可以再把錢給用戶退回去,保證交易的公平性。
退款恰恰相反,需要推定成功。告訴用戶,錢退給你了。最終通過查詢或者對賬發現實際是退款失敗了,可以系統重新發起退款,直到真正退成功為止。
後台管理系統也很需要這種終態設計。比如發佈系統,發佈了一個功能,發佈系統如果出現了問題,這次發佈沒有結束。用戶可能沒有辦法進行下一次發佈。這時候可以設置超時自動結束,防止未結束的流程始終在那裡,起碼會干擾視線,增加判斷成本。
一種思維理念
誰生產誰負責
在《設計開發中要避免的兩個坑和一種可借鑒的設計思想》中我建議項目千萬不要叫base、basic之類包羅萬象的詞,容易造成邊界不清。
之前有人就跟我說過:這個數據我們只是提供,數據不是我們自己要用,而是有幾個團隊都要用,放在我們這裡不合適。有base模塊,那就應該放到base里啦。
從領域上來說,這種思維理念不對,數據應該誰生產誰負責。
舉個例子:我們創建了一個系統,是toC的。開發這個系統的人能說這個系統是十幾億中國人用的,放在我們這裡不合適,讓十幾億中國人自己維護去?用戶有很多,系統開發源頭是一個,這就是誰生產誰負責。對於系統是這樣,數據也是這樣。
總結
這種小的設計技巧還有很多,比如兩碼一態設計。仔細思考自己的工作,你也許會被自己驚艷到。
往期推薦