談談企業信息化 數據庫應用中的SQL進攻型(積極型)編程

何爲數據庫SQL“進攻型”編程或"積極型"編程?通常指先處理大概率發生事件,然後再處理小概率異常事件。我們以企業進銷存軟件銷售模塊中常見的銷售訂單審覈爲例,談談SQL“進攻型”編程和“防禦型”編程的差異。

1、銷售訂單審覈,程序要做的事情

以傳統的飲料企業爲例,銷售訂單審覈,程序會做如下幾個事情:
1)訂單狀態變更:錄入狀態 --> 已審覈狀態;
2)扣減客戶資金(可用資金或折扣、報損等臺賬資金);
3)…

訂單在“錄入”狀態還可以:
1)客戶自己關閉訂單,錄入狀態 變成 已關閉狀態;
2)企業銷售內勤關閉訂單,比如所報產品沒貨,短期有無生產安排;
3)他人審覈;

所以,訂單審覈時,必須覈實訂單狀態是否爲“錄入”狀態,只有錄入狀態,纔可以審覈。

2、SQL處理方式

1)進攻型編程處理方式

update sale_order set status = '已審覈' where id = 1 and status = '錄入';
if (@affectedRows != 1) {
	報錯:"審覈失敗,訂單狀態發生變化,請刷新頁面重試"
}
...

2)防禦性編程處理方式

先獲取訂單:
select * from sale_order where id = 1;
判斷訂單狀態 是否爲 錄入狀態:
if (order.status != "錄入") {
	報錯:"審覈失敗,訂單狀態發生變化,請刷新頁面重試"
}
更新訂單狀態:
update sale_order set status = '已審覈' where id = 1;
...

3、小結

從上可以看出,SQL“進攻型”編程 相對 “防禦性”編程來說:
1)代碼少、簡潔,開發效率高;
2)可以少執行一次查詢SQL,性能更好;
對於企業信息化來說,實際操作中有很多類似訂單審覈這樣一錄、一審的操作,還有多人同時審覈的操作,建議儘量使用SQL“進攻型”編程,代碼簡潔,便於維護。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章