業務邏輯中如何處理斷線重連

2021-09-24 15:52:16 字數 1434 閱讀 6416

本篇文章簡單介紹了在業務邏輯中處理斷線重連的一種方法

之前一直對如何在業務邏輯中處理斷線重連沒有乙個清晰的認識,後來做了一些思考,這裡簡單記錄一下~

假設存在一段業務邏輯 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,...