唯一性約束是乙個經常出現的業務邏輯,剛開始我覺得非常簡單,不過深入考慮後,發現實現起來還不是那麼簡單,下面就讓我們分析一下。
示例:使用者的使用者名稱必須唯一。
第一種實現思路:後驗證+不用資料庫索引,在插入使用者名稱和修改使用者名稱之後執行一次驗證,這個驗證邏輯執行的事務隔離級別必須處於「讀未提交」級別。
1public
volid insert(user user)210
ts1.complete();11}
12 }
第二種實現思路:前驗證+不用資料庫索引,在插入使用者名稱和修改使用者名稱之前執行一次驗證,整個事務執行在「序列化」隔離級別。
1public
volid insert(user user)
29 }
第三種實現思路:前驗證+資料庫索引,在插入使用者名稱和修改使用者名稱之前執行一次驗證,整個事務執行在「讀已提交」隔離級別。
1public
volid insert(user user)
29 }
第四實現思路種:記憶體鎖。
有朋友會想,為啥不直接用資料庫索引呢?失敗了就跑出異常,因為我們需要收集到友好的異常資訊顯示給ui,所以才需要在程式裡判定唯一性,然後丟擲友好的異常資訊。
總體來說我覺得第三種思路在現實中比較方便。
示例:訂單的訂單項的產品必須唯一。
第一種實現思路:聚合根的樂觀鎖+聚合自身必須保證這種約束。
我覺得這個場景下只有這一種實現是比較合理的,就不介紹其他思路了。
在健身房倉促寫就,大家多提意見。
DDD 如何處理「唯一性」業務邏輯
唯一性約束是乙個經常出現的業務邏輯,剛開始我覺得非常簡單,不過深入考慮後,發現實現起來還不是那麼簡單,下面就讓我們分析一下。示例 使用者的使用者名稱必須唯一。第一種實現思路 後驗證 不用資料庫索引,在插入使用者名稱和修改使用者名稱之後執行一次驗證,這個驗證邏輯執行的事務隔離級別必須處於 讀未提交 級...
如何保證物件的唯一性
思想 1,不讓其他程式建立該類物件。2,在本類中建立乙個本類物件。3,對外提供方法,讓其他程式獲取這個物件。步驟 1,因為建立物件都需要建構函式初始化,只要將本類中的建構函式私有化,其他程式就無法再建立該類物件 2,就在類中建立乙個本類的物件 3,定義乙個方法,返回該物件,讓其他程式可以通過方法就得...
業務邏輯中如何處理斷線重連
本篇文章簡單介紹了在業務邏輯中處理斷線重連的一種方法 之前一直對如何在業務邏輯中處理斷線重連沒有乙個清晰的認識,後來做了一些思考,這裡簡單記錄一下 假設存在一段業務邏輯 a aa 整體實現上分為兩部分 一般來講都是 a sa s as 負責維護邏輯狀態與事件分發,a ca c ac 則主要負責顯示,...