本篇文章簡單介紹了在業務邏輯中處理斷線重連的一種方法之前一直對如何在業務邏輯中處理斷線重連沒有乙個清晰的認識,後來做了一些思考,這裡簡單記錄一下~
假設存在一段業務邏輯 a
aa ,整體實現上分為兩部分:
一般來講都是 a
sa_s
as 負責維護邏輯狀態與事件分發,a
ca_c
ac 則主要負責顯示,輸入等表現層的處理.
假設 a
ca_c
ac 不存在狀態儲存,僅作為純終端顯示的話,那麼我們就不用處理斷線重連的問題了,因為 a
ca_c
ac 的顯示(由 a
sa_s
as 驅動)總是與 a
sa_s
as 同步的.
不過在現實的開發中並沒有這麼理想化, a
ca_c
ac 或多或少總會在本地儲存一些狀態,於是 a
ca_c
ac 與 a
sa_s
as 便產生了狀態同步問題,如果網路條件良好,邏輯上也沒有紕漏的話, a
ca_c
ac 與 a
sa_s
as 間的狀態同步其實也不會存在什麼問題.
只是一旦引入斷線重連,狀態同步問題就出現了,因為在 a
ca_c
ac 斷線然後進行重連的這段時間中, a
sa_s
as 發生的狀態變化將無法同步至 a
ca_c
ac, 甚至 a
ca_c
ac 重連成功之後, a
sa_s
as 本身都可能因為處理完畢而結束了自己的邏輯過程.
那麼如何正確的處理這種情況下的斷線重連呢?
以下是我的一點思考:
除了邏輯狀態以外, a
sa_s
as 與 a
ca_c
ac 之間可能還會進行事件通知,推薦規避這些事件通知,都改以狀態(的變化)實現.
採用上述方案之後, a
ca_c
ac 就能在重連成功之後,獲得最新的 a
sa_s
as 狀態,於是便能與 a
sa_s
as 再次形成同步;即便此時 a
sa_s
as 邏輯已經退出,不再能推送當前狀態資訊,也因為 a
ca_c
ac 在 on_
rela
y_su
cces
son\_relay\_success
on_rel
ay_s
ucce
ss之後主動做了一次狀態清除操作,所以狀態上也是同步的(a
sa_s
as 退出便意味著 a
ca_c
ac 狀態需要清除).
DDD 如何處理「唯一性」業務邏輯
唯一性約束是乙個經常出現的業務邏輯,剛開始我覺得非常簡單,不過深入考慮後,發現實現起來還不是那麼簡單,下面就讓我們分析一下。示例 使用者的使用者名稱必須唯一。第一種實現思路 後驗證 不用資料庫索引,在插入使用者名稱和修改使用者名稱之後執行一次驗證,這個驗證邏輯執行的事務隔離級別必須處於 讀未提交 級...
DDD 如何處理「唯一性」業務邏輯
唯一性約束是乙個經常出現的業務邏輯,剛開始我覺得非常簡單,不過深入考慮後,發現實現起來還不是那麼簡單,下面就讓我們分析一下。示例 使用者的使用者名稱必須唯一。第一種實現思路 後驗證 不用資料庫索引,在插入使用者名稱和修改使用者名稱之後執行一次驗證,這個驗證邏輯執行的事務隔離級別必須處於 讀未提交 級...
開發中返回,如何處理
不小心在開發過程中,得到了 null 以及的返回值,找了好長時間只找到了乙個關於的。由於要根據返回值進行判斷,做出必要反應,因此必須知道返回值所代表的具體字元,在得到 null 後利用isequal 和 null,null nil,nil比較後均得不到正確結果,弄得不知所措了,但是還是感覺像nil,...